Capture et traitement d'images
Aperçu
L'activité annuelle de rassemblement Wufu a recommencé, même si elle ne coûte que quelques dollars à la fin, elle ne peut pas arrêter l'intérêt de tous à rassembler les cinq porte-bonheur. Pour collecter les cinq bénédictions, vous devez utiliser la RA pour numériser des objets avec des personnages de bénédiction. Je me souviens que j'avais l'habitude de télécharger toutes sortes de photos de bénédiction à partir d'Internet pour les numériser, et c'était assez difficile à télécharger, donc cette année j'ai directement exploré les images Baidu avec "福" , "Fuqi", "fu" comme mots-clés dans l'image. Plus tard, j'ai pensé que lorsque j'étudiais les images, il y avait beaucoup d'opérations de traitement d'image de base, et j'ai fait une petite manipulation sur l'image à la main, transformant un personnage de bénédiction en plusieurs caractères de bénédiction. Les coulisses ont répondu "福" pour obtenir plus de 170 photos avec le mot "Fu". La création n'est pas facile, il suffit de cliquer sur "Je regarde".
Capture d'image
La capture d'image n'utilise aucun framework pour capturer, il s'agit de données de demande d'URL très simples, de données d'analyse, de persistance des données. Je n'entrerai pas dans les détails ici. Si vous voulez savoir, vous pouvez voir des dizaines de lignes de code dans mes tweets précédents pour télécharger des fonds d'écran HD par lots.
Le code d'implémentation est le suivant
# -*- coding:utf-8 -*-
import requests
import os
import re
import time
import random
def getManyPages(keyword, pages):
params = []
for i in range(30, 30 * pages + 30, 30):
params.append({
})
url = 'https://image.baidu.com/search/acjson'
urls = []
for i in params:
urls.append(requests.get(url, params=i).json().get('data'))
return urls
def getpage(key, page):
new_url = []
for i in range(0, page * 30 + 30, 30):
new_url.append({
})
url = 'https://image.baidu.com/search/acjson'
result = []
for i in new_url:
randnumber1 = random.randint(0, 3) # 生成随机数
time.sleep(randnumber1) # 按随机数延时
print(i)
try:
result.append(requests.get(url, params=i).json().get('data'))
print(result)
except: # 如果延时之后还是被拒绝
# print('error\n')
randnumber2 = random.randint(5, 10) # 延迟随机时间
time.sleep(randnumber2)
return result
def getImg(dataList, localPath, keyword):
i = 1
x = 0
for list in dataList:
for each in list:
try:
if each.get('thumbURL') != None:
print('downloading:%s' % each.get('thumbURL'))
pic = requests.get(each.get('thumbURL'))
except requests.exceptions.ConnectionError:
print('error: This photo cannot be downloaded')
continue
dir = 'image/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
def dowmloadPic(html, keyword):
pic_url = re.findall('"objURL":"(.*?)",', html, re.S)
i = 1
print('Can not find key word:' + keyword + 'is downloading...')
for each in pic_url:
print('No ' + str(i) + '.jpg is downloading ,URL:' + str(each))
try:
pic = requests.get(each, timeout=10)
except requests.exceptions.ConnectionError:
print('error: This photo cannot be downloaded')
continue
dir = 'image/' + keyword + '_' + str(i) + '.jpg'
fp = open(dir, 'wb')
fp.write(pic.content)
fp.close()
i += 1
if __name__ == '__main__':
keyword = '福气' # 改变keyword就可以得到你要搜索的图片
dataList = getpage(keyword, 2) # key word and number of page
getImg(dataList, '/images', keyword) # path
Traitement d'image
Dans cette partie, j'ai fait les trois traitements d'image les plus simples (en fait juste appelés la fonction), essentiellement terminés en une ou deux phrases. Un "traitement de gris", une "inversion de pixel" et une "inversion d'image" ont été respectivement appliqués à l'image. code montrer comme ci-dessous.
import cv2
from matplotlib import pyplot as plt
import numpy as np
imgOgr = cv2.imread('D://python_pycharm//MyPy//image//fu_7.jpg')
# 转换颜色模式,显示原图
img = cv2.cvtColor(imgOgr, cv2.COLOR_BGR2RGB)
# 灰度图
img_gray = cv2.cvtColor(imgOgr, cv2.COLOR_RGB2GRAY)
# 反色
img_array = np.asarray(img)
img_re = 255 - img_array
# 倒
img_r = cv2.flip(img, -1)
plt.subplot(2, 2, 1), plt.imshow(img)
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 2), plt.imshow(img_gray, cmap="gray")
plt.title('Gray'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 3), plt.imshow(img_re)
plt.title('re'), plt.xticks([]), plt.yticks([])
plt.subplot(2, 2, 4), plt.imshow(img_r)
plt.title('r'), plt.xticks([]), plt.yticks([])
plt.show()
Montrer les résultats
1. Effet de capture d'image
2. Résultats du traitement d'image