Глубокое понимание opencv в начале opencv

искусственный интеллект
Глубокое понимание opencv в начале opencv

компьютерное зрение

Компьютерное зрение, также известное как машинное зрение, – это наука, изучающая, как заставить машины "видеть". Это относится к использованию камер и компьютеров вместо человеческих глаз для идентификации, отслеживания и измерения целей. Обработка становится изображением, которое больше подходит для человеческого наблюдения или передачи для обнаружения вместе.Это широкая область, и существует множество областей применения трудоемких компьютеров, таких как беспилотное вождение, беспилотная безопасность, распознавание лиц, распознавание номерных знаков транспортных средств, поиск изображений. более.

что такое opencv

opencv — это библиотека компьютерного зрения с лицензией BSD (с открытым исходным кодом), которая работает в операционных системах Linux, Windows, Android и Mac OS. Написанный на C и C++, он довольно выгоден с точки зрения производительности, он предоставляет множество алгоритмов обработки изображений и компьютерного зрения, мы можем использовать opencv для обработки изображений, обнаружения целей, проверки качества промышленной продукции и так далее. В то же время модуль ML OpenCV также является полной и общей библиотекой машинного обучения, которая может помочь нам справиться с проблемами машинного обучения.

Как установить

Установить opencv на python относительно просто, мы можем установить его напрямую с помощью pip.

pip install opencv-python

базовая обработка изображений python-opencv В opencv чаще всего мы имеем дело с изображениями, поэтому нам необходимо сначала понять знание изображений и цветов.

Основы изображения

1. Пиксели

Пиксели состоят из маленьких квадратов на изображении.Эти маленькие квадраты имеют определенное положение и назначенное значение цвета.Цвет и положение маленьких квадратов определяют внешний вид изображения. Пиксель можно рассматривать как неделимую единицу или элемент всего изображения. Неделимый означает, что его нельзя разрезать на более мелкие единицы или элементы, он существует как единая цветовая сетка. Каждое растровое изображение содержит определенное количество пикселей, определяющих размер изображения на экране.

2. Классификация изображений

Изображения обычно можно разделить на: цветные изображения, бинарные изображения и изображения в градациях серого в зависимости от цвета.

Цветное изображение:

Цветное изображение относится к изображению, в котором каждый пиксель состоит из компонентов R, G и B, где R, G и B описываются разными уровнями серого.

Бинарное изображение:

Каждый пиксель изображения имеет только два возможных значения или состояния уровня серого, и люди часто используют черно-белые, черно-белые и монохромные изображения для представления бинарных изображений. Двоичное изображение означает, что в изображении есть только два уровня серого, то есть значение серого любого пикселя в изображении равно 0 или 255, что соответствует черному и белому.

Изображение в оттенках серого:

Изображение обычно отображается в виде шкалы серого от самого темного черного до самого яркого белого, хотя теоретически эта выборка может быть любого оттенка цвета или даже другого цвета с разной интенсивностью. Изображения в градациях серого отличаются от черно-белых изображений.В области компьютерной графики черно-белые изображения имеют только два цвета, черный и белый.Изображения в градациях серого имеют много уровней глубины цвета между черным и белым.

3. Цветовое пространство (цветовая модель: RGB, HSV, Lab)

RGB получает различные цвета, изменяя три цветовых канала красного (R), зеленого (G) и синего (B) и накладывая их друг на друга. Диапазон значений: [0,255], [0,255], [0,255].

在opencv中是以BGR作为颜色空间, На самом деле это историческая проблема. Причина, по которой ранние разработчики использовали BGR в качестве цветового пространства, заключается в том, что формат BGR в то время был более популярен среди производителей камер и поставщиков программного обеспечения, поэтому он продолжается.

HSV (Hue, Saturation, Value) — это цветовое пространство, созданное А. Р. Смитом в 1978 году на основе интуитивных характеристик цвета, также известное как модель Hexcone. Параметры цвета в этой модели: оттенок (H), насыщенность (S), яркость (V).

H (оттенок) оттенок: [0,360] S (Saturation) насыщенность, то есть чистота цвета, 0 насыщенность это белый V (значение/яркость): яркость 0 — яркость чисто черного цвета. В OpenCV цветовой диапазон: Н = [0,180] S = [0,255] V = [0,255]

Таблица цветовых диапазонов HSV

Цветовая модель Lab состоит из трех элементов, одного из которых является яркость, и двух компонентов цвета a и b для представления цвета. a включает цвета от темно-зеленого (низкое значение яркости) до серого (среднее значение яркости) и ярко-розового (высокое значение яркости); b — от голубого (низкое значение яркости) до серого (среднее значение яркости) и затем до желтого (высокое значение яркости значение яркости).

Канал L: яркость пикселей, верхний белый и нижний черный, средний серый канал: левый зеленый правый красный канал b: чистый синий на одном конце, чистый желтый на другом конце

Простой пример обработки изображений python-opencv

1. Отображение изображения

#-*- coding:utf8 -*-
import cv2
path = 'sallen.jpeg'
# 照片读取
img = cv2.imread(path)
# 展示
cv2.imshow("show_img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

2. Бинаризация изображения

#-*- coding:utf8 -*-
import cv2
path = 'sallen.jpeg'
# 照片读取
img = cv2.imread(path)
# 灰度处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
'''
cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
src:表示的是图片源
thresh:表示的是阈值(起始值)
maxval:表示的是最大值
type:表示的是这里划分的时候使用的是什么类型的算法**,常用值为0(cv2.THRESH_BINARY)**
'''
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 展示
cv2.imshow("binary", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()

3. Цветовая гистограмма

import cv2
from matplotlib import pyplot as plt

path = 'sallen.jpeg'

img = cv2.imread(path, cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

img_b = img[..., 0]
img_g = img[..., 1]
img_r = img[..., 2]
'''
imaes:输入的图像
channels:选择图像的通道
mask:掩膜,是一个大小和image一样的np数组,其中把需要处理的部分指定为1,不需要处理的部分指定为0,一般设置为None,表示处理整幅图像
histSize:使用多少个bin(柱子),一般为256
ranges:像素值的范围,一般为[0,255]表示0~255
'''
b_hist = cv2.calcHist([img],[0], None, [256], [0, 256])
g_hist = cv2.calcHist([img], [1], None, [256], [0, 256])
r_hist = cv2.calcHist([img], [2], None, [256], [0, 256])

plt.subplot(221)
plt.imshow(img)
plt.axis('off')
plt.title('source')

# 显示3个通道的颜色直方图
plt.subplot(222)
plt.plot(b_hist, label='B', color='blue')
plt.plot(g_hist, label='G', color='green')
plt.plot(r_hist, label='R', color='red')
plt.legend(loc='best') #给照片加上图例
plt.xlim([0, 256])

plt.show()

4. Масштабирование изображения

import cv2

img = cv2.imread("sallen.jpeg")
cv2.imshow("img",img)

img_1 = cv2.resize(img,(100,100))
cv2.imshow("img1",img_1)

cv2.waitKey()

5. Добавьте текст к изображениям

import cv2
img = cv2.imread('sallen.jpeg')
font = cv2.FONT_HERSHEY_SIMPLEX
# cv2.putText(src, text, place, Font, Font_Size, Font_Color, Font_Overstriking)
res_img = cv2.putText(img, 'hello world', (0, 50), font, 1.2, (0, 0, 0), 2)
cv2.imshow("img_text",res_img)
cv2.waitKey()

6. Создайте пустое изображение указанного размера

import cv2
import numpy as np

img_black = np.zeros((500,500),np.uint8)
cv2.imshow("img_black",img_black)
cv2.waitKey()

7. Смещение изображения

import cv2
import numpy as np
img = cv2.imread('sallen.jpeg')
cv2.imshow('source',img)
#原图片的高和宽
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
#创建移位矩阵
matShift = np.float32([[1,0,0],[0,1,100]])#2*3矩阵 y向下偏移
#cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
dst = cv2.warpAffine(img,matShift,(height,width))
cv2.imshow('dst',dst)
cv2.waitKey()

8. Зеркальное отображение изображений

import cv2
import numpy as np

img = cv2.imread('sallen.jpeg')
cv2.imshow('source',img)

img1 = cv2.flip(img,1) 
'''
flip(src, flipCode[, dst]) -> dst
参数1 输入图像
参数2 flipCode。用于指定镜像翻转的类型,code >0 表示水平翻转,code =0 表示垂直翻转,code <0 表示水平和垂直翻转。
参数3 可选参数。用于设置输出数组,即镜像翻转后的图像数据,默认为与输入图像数组大小和类型都相同的数组。
'''
cv2.imshow('flip',img1)
cv2.waitKey()

9. Поворот изображения

import cv2 
import numpy as np 
 
path = 'sallen.jpeg'
image = cv2.imread(path)
cv2.imshow("source", image)
 
(h, w) = image.shape[:2]
center = (w / 2, h / 2)
'''
getRotationMatrix2D(Point2f center, double angle, double scale)
center:表示源图像的中心
angle:旋转角度,正值为逆时针旋转
scale:缩放系数
'''
M = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
cv2.imshow("Rotated by 45 Degrees", rotated) 
cv2.waitKey()

В следующей главе мы расскажем больше об обработке спецэффектов и украшении opencv для изображений.

Одноименный публичный аккаунт

Обмен статьями об искусственном интеллекте, машинном обучении, компьютерном зрении и т. д. Практические навыки галантерейных товаров, улучшайте технологии вместе.