Оригинальная ссылка на личный блог
В этой статье кратко представлены некоторые основные понятия обработки компьютерной графики, а также некоторые интересные примеры и соответствующие операции кода Open CV.
Кстати, поздравляем IG с победой!
Во-первых, принцип хранения изображений
1. Цветовое пространство RGB
(1) Трехканальная цветовая карта RGB
Картинка формируется путем наложения трехмерных матриц ([0,255]) В общем случае речь идет о наложении трех матриц только с R (красный), G (зеленый) и B (синий).
2. Обработка изображений
(1) Свертка/фильтрация
Во-вторых, основы OpenCV
Open CV — это библиотека компьютерного зрения с открытым исходным кодом, написанная на C/C++ и предоставляющая интерфейсы для Python, MATLAB и других языков.
1. Основные операции ввода/вывода
#-*- coding: utf-8 -*-
import cv2
# 打开图片
img = cv2.imread('lion.jpg')
# 显示图片
img = cv2.imshow('lion','lion.jpg')
# 保存图片
cv2.imwrite('lion2.jpg',img)
2. Оттенки серого, обработка бинаризации
Оттенки серого: В модели RGB, если R=G=B, цвет представляет собой цвет в оттенках серого.
Бинаризация: Бинаризация изображения заключается в установке значения серого пикселя изображения на 0 или 255, и все изображение представляет собой очевидный визуальный эффект только черного и белого цветов.
#-*- coding: utf-8 -*-
import cv2
# 读取图片
img = cv2.imread('wsc.jpeg')
# 灰度化处理、保存处理后文件
img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('wsc-gray.jpg',img)
# 二值化处理、保存处理后文件
cv2.threshold(image, 550, 550, 0, image)
cv2.imwrite('wsc-two-value.jpg',img)
Перед обработкой изображения | Обработка оттенков серого |
---|---|
Перед обработкой изображения | Двоичная обработка |
3. Сопоставление изображений
matchTemplate
Используется для сравнения изображения с изображением шаблона, чтобы найти цель
cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))
ключевой параметр
-
TM_SQDIFF
Метод сопоставления квадратной разности: в этом методе для сопоставления используется квадратичная разность; наилучшее значение совпадения равно 0; чем хуже совпадение, тем больше значение совпадения. -
TM_CCORR
Метод корреляционного сопоставления: этот метод использует операцию умножения; чем больше значение, тем лучше степень совпадения. -
TM_CCOEFF
Метод сопоставления коэффициентов корреляции: 1 означает идеальное совпадение, -1 означает наихудшее совпадение. -
TM_SQDIFF_NORMED
Метод сопоставления нормализованных квадратов разностей -
TM_CCORR_NORMED
Метод сопоставления нормализованной корреляции -
TM_CCOEFF_NORMED
Метод сопоставления нормализованного коэффициента корреляции
3. Интересные примеры
1. Обнаружение края
Хитрое обнаружение краев
код
#-*- coding: utf-8 -*-
import cv2
# 读取图片
img = cv2.imread('wsc.jpeg')
# Canny边缘检测处理,并写入图片
cv2.imwrite('wsc1.jpeg',cv2.Canny(img,200,300))
Перед обработкой изображения | После обработки изображения |
---|---|
2. Распознавание лиц
haarcascade_frontalface_default.xml
, файл является файлом детектора лиц (по умолчанию), файл можно найти в OpenCVGithubскачать.
#-*- coding: utf-8 -*-
import cv2
def detect(filename):
face_cascade = cv2.CascadeClassifier('./data/haarcascades/haarcascade_frontalface_default.xml')
# 读取图片
img = cv2.imread(filename)
# 图片灰度处理
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# 人脸检测,每次迭代图像压缩率、人脸矩形保留近邻数目最小值
faces = face_cascade.detectMultiScale(gray,1.3,6)
# x,y为左上角坐标,w,h表示人脸宽度和高度
for(x,y,w,h) in faces:
# 检测到人脸绘制成蓝色矩形
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
# 写入文件
cv2.imwrite('/Users/fangzhijie/Pictures/ig1.jpeg',img)
filename = 'ig.jpeg'
detect(filename)
Перед обработкой изображения |
---|
После обработки изображения |
Остальные три не были идентифицированы, а причина еще предстоит установить.
3. Сопоставление изображений
Поиск шаблонных изображений
исходное изображение
код
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读取图片
img = cv2.imread('ig.jpeg')
template = cv2.imread('wsc123.png')
# 对图片进行缩放,缩放到合适大小90*90
template = cv2.resize(template, (90, 90),interpolation=cv2.INTER_CUBIC)
# 进行图像匹配
res = cv2.matchTemplate(img,template,eval('cv2.TM_CCOEFF'))
# 记录模板的宽度和高度
w, h = template[:,:,0].shape[::-1]
# 王思聪边框的具体位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
# 画出红框
top_left = max_loc
bottom_right = (top_left[0] + w, top_left[1] + h)
imgplt = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
cv2.rectangle(imgplt,top_left, bottom_right, 255, 2)
# 显示图片
plt.imshow(imgplt)
plt.title('Detected results'), plt.xticks([]), plt.yticks([])
plt.show()
результат