opencv aprendizaje cinco: operaciones de píxeles de imagen: operaciones numéricas y operaciones lógicas

Operación de píxeles

Inserte la descripción de la imagen aquí

Uno, operaciones aritméticas

Inserte la descripción de la imagen aquí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:
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí

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:
Inserte la descripción de la imagen aquí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

Inserte la descripción de la imagen aquí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:
Inserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquí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á

Supongo que te gusta

Origin blog.csdn.net/weixin_44145452/article/details/112425749
Recomendado
Clasificación