Захват и обработка изображений
Обзор
Ежегодное мероприятие по сбору Вуфу началось снова. Даже если оно будет стоить всего несколько долларов в конце, оно не может остановить всеобщий интерес к сбору пятерки удачи. Чтобы собрать пять благословений, вам нужно использовать AR для сканирования объектов с символами благословения. Я помню, что раньше я загружал для сканирования всевозможные изображения благословений из Интернета, и их было довольно сложно загрузить, поэтому в этом году я напрямую сканировал изображения Baidu с помощью символа "福" , "Fuqi", "fu" как ключевые слова на картинке. Позже я подумал, что когда я изучал изображения, было много основных операций обработки изображений, и я немного манипулировал изображением вручную, превращая один символ благословения в несколько символов благословения. За кулисами ответили «福», чтобы получить более 170 фотографий «Фу». Создание не из легких, достаточно нажать «Я смотрю».
Захват изображения
Захват изображений не использует какую-либо структуру для захвата, это очень простые данные запроса URL, данные анализа, сохранение данных. Я не буду вдаваться в подробности здесь. Если вы хотите знать, вы можете увидеть десятки строк кода в моих предыдущих твитах для загрузки HD-обоев партиями.
Код реализации выглядит следующим образом
# -*- 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
Обработка изображений
В этой части я выполнил три простейших обработки изображений (на самом деле просто называемые функцией), в основном завершенные одним или двумя предложениями. «Обработка серого», «инверсия пикселей» и «инверсия изображения» были выполнены для изображения соответственно. код показан ниже.
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()
Показать результаты
1. Эффект захвата изображения
2. Результаты обработки изображений