Первый опыт OpenCV

машинное обучение искусственный интеллект OpenCV
Первый опыт OpenCV

Оригинальная ссылка на личный блог

В этой статье кратко представлены некоторые основные понятия обработки компьютерной графики, а также некоторые интересные примеры и соответствующие операции кода 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)

Перед обработкой изображения Обработка оттенков серого
wsc图片处理前 wsc图片处理前
Перед обработкой изображения Двоичная обработка
wsc图片处理前 wsc图片处理后

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))


Перед обработкой изображения После обработки изображения
wsc图片处理前 wsc图片处理后

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)

Перед обработкой изображения
wsc图片处理前
После обработки изображения
wsc图片处理前

Остальные три не были идентифицированы, а причина еще предстоит установить.

3. Сопоставление изображений

Поиск шаблонных изображений

模板图片

исходное изображение

IG原图

код


# -*- 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()

результат

处理结果