Operación de píxeles
Uno, operaciones aritméticas
1.1 Sumar, restar, multiplicar y dividir
Las funciones de procesamiento de color de imagen propias de Opencv:
sumar: sumar ()
, restar: restar (),
multiplicar: multiplicar ()
, dividir: dividir (), el
principio es: obtener dos (solo dos a la vez) time) Zhang) El valor de color de la misma posición de una imagen para realizar el cálculo.
Requisitos operativos: la forma de las dos imágenes debe ser la misma.
Imagen de ejemplo:
Código:
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
def add_demo(m1, m2):
dst = cv.add(m1, m2)
cv.imshow("add_demo", dst)
def subtract_demo(m1, m2):
dst = cv.subtract(m1, m2)
cv.imshow("subtract_demo", dst)
def multiply_demo(m1, m2):
dst = cv.multiply(m1, m2)
cv.imshow("multiply_demo", dst)
def divide_demo(m1, m2):
dst = cv.divide(m1, m2)
cv.imshow("divide_demo", dst)
src1 = cv.imread("D:/opencv3.4.13/opencv/sources/samples/data/LinuxLogo.jpg") #读取图片位置
src2 = cv.imread("D:/opencv3.4.13/opencv/sources/samples/data/WindowsLogo.jpg") #读取图片位置
print(src1.shape)
print(src2.shape)
cv.namedWindow("image1", cv.WINDOW_AUTOSIZE) #创建一个GUI
cv.imshow("image1", src1) #对窗口图片进行展示
cv.imshow("image2", src2) #对窗口图片进行展示
add_demo(src1, src2)
subtract_demo(src1, src2)
multiply_demo(src1, src2)
divide_demo(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows() #释放所有的内存
El código se puede simplificar:
import cv2 as cv
#数值运算:加减乘除
def shu_image(src11, src22):
src = cv.add(src11, src22)#加
cv.imshow("add", src)
src = cv.subtract(src11, src22)#减
cv.imshow("subtract", src)
src = cv.subtract(src11, src22)#乘
cv.imshow("subtract", src)
src = cv.divide(src11, src22)#除
cv.imshow("divide", src)
src1 = cv.imread("01.jpg")
src2 = cv.imread("02.jpg")
cv.imshow("image1", src1)
cv.imshow("image2", src2)
shu_image(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows()
Ejecutar captura de pantalla:
1.2 Ajustar el brillo y el contraste
Principio básico: Se combinan dos imágenes.
Primero, cree una nueva imagen con cero pigmentos de acuerdo con el formato de imagen original y luego sintetice una nueva imagen de acuerdo con las diferentes proporciones de las dos imágenes. Función utilizada principalmente: función addWeighted
el código se muestra a continuación:
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
# 粗略的调节对比度和亮度
def contrast_brightness_image(src1, a, g):
h, w, ch = src1.shape # 获取shape的数值,height和width、通道
# 新建全零图片数组src2,将height和width,类型设置为原图片的通道类型(色素全为零,输出为全黑图片)
src2 = np.zeros([h, w, ch], src1.dtype)
dst = cv.addWeighted(src1, a, src2, 1 - a, g) # addWeighted函数说明如下
cv.imshow("con-bri-demo", dst)
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")
cv.namedWindow("image1", cv.WINDOW_AUTOSIZE) #创建一个GUI
cv.imshow("image1", src) #对窗口图片进行展示
contrast_brightness_image(src, 1.5, 10)#第一个1.2为对比度 第二个为亮度数值越大越亮
cv.waitKey(0)
cv.destroyAllWindows() #释放所有的内存
Ejecute la captura de pantalla:
función addWeighted: oficial: calcule el peso de dos matrices de imágenes y mi entendimiento es sintetizar dos imágenes de acuerdo con la proporción.
Opencv: fusión de imágenes cv2.addWeighted ()
addWeighted (InputArray src1, doble alfa, InputArray src2, doble beta, doble gamma, OutputArray dst, int dtype = -1);
Hay un total de siete parámetros: los primeros 4 son las dos imágenes a sintetizar y sus proporciones, el quinto doble gamma juega un papel de ajuste fino, el sexto OutputArray dst es la imagen sintetizada y el séptimo tipo de imagen de salida (opcional parámetro, predeterminado -1)
Existe una fórmula para obtener la salida de imagen agregando dos imágenes: dst = src1 [I] * alpha + src2 [I] * beta + gamma
Referencia: Notas de estudio avanzadas de Opencv 3: Operación de píxeles y ajuste de brillo y contraste de la imagen
Cuanto mayor sea la c, más brillante.
Lo que funciona es el coeficiente 1 y la cantidad de ajuste de brillo.
El coeficiente 2 multiplicado por la matriz de todos los ceros es inútil, por lo que se usa como parámetro
Dos, operaciones lógicas
2.1 Y, O, NO
Opencv viene con funciones de procesamiento de color de imagen:
y: bitwise_add ()
o: bitwise_or ()
non: bitwise_not ()
XOR: bitwise_xor () El
código es el siguiente:
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
def logic_demo(m1, m2):
dst = cv.bitwise_and(m1, m2)
dst = cv.bitwise_or(m1, m2)
image = cv.imread("D:/opencv3.4.13/opencv/sources/samples/data/LinuxLogo.jpg") # 读取图片位
dst = cv.bitwise_not(image)
dst = cv.bitwise_xor(m1, m2)
cv.imshow("logic_demo", dst)
src1 = cv.imread("D:/opencv3.4.13/opencv/sources/samples/data/LinuxLogo.jpg") #读取图片位置
src2 = cv.imread("D:/opencv3.4.13/opencv/sources/samples/data/WindowsLogo.jpg") #读取图片位置
print(src1.shape)
print(src2.shape)
cv.namedWindow("image1", cv.WINDOW_AUTOSIZE) #创建一个GUI
cv.imshow("image1", src1) #对窗口图片进行展示
cv.imshow("image2", src2) #对窗口图片进行展示
logic_demo(src1, src2)
cv.waitKey(0)
cv.destroyAllWindows() #释放所有的内存
Ejecutar captura de pantalla:
2.2 Control de capa de máscara El
código es el siguiente:
import cv2 as cv #导入cv模块
import numpy as np #np科学计数的包,通过numpy对数据进行处理
def extrace_object_demo():
capture = cv.VideoCapture("C:/Users/lenovo/Desktop/opencv/daima/banknum/test.mp4")
while(True):
ret, frame = capture.read()
if ret == False:
break;
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
lower_hsv = np.array([37, 43, 46])
upper_hsv = np.array([77, 255, 255])
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)
dst = cv.bitwise_and(frame, frame, mask=mask)
cv.imshow("video", frame)
cv.imshow("mask", dst)
c = cv.waitKey(40)
if c == 27:
break
extrace_object_demo()
cv.waitKey(0)
cv.destroyAllWindows() #释放所有的内存
Ejecutar captura de pantalla:
explique el significado de los parámetros en res = cv2.bitwise_and (img, img, mask = mask)
src1: la primera imagen (el primer objeto fusionado) src2: la segunda imagen (el segundo objeto fusionado) máscara: Comprenda la reglas que se fusionarán. Si el área de la imagen (escalada en escala de grises y luego enmascarada) tiene negro (valor 0), no se fusiona (el área fusionada de la primera imagen y el área fusionada de la segunda imagen). Viceversa, se ejecutará