opencv aprendizaje cuatro: conversión de espacio de color

1. Espacio de color común

Inserte la descripción de la imagen aquíEspacio de color RGB El espacio de color
RGB (rojo, verde, azul) se utiliza con mayor frecuencia en los sistemas de visualización. Los tubos de rayos catódicos de color y las pantallas de gráficos de trama de color utilizan valores R, G y B para activar cañones de electrones R, G y B para emitir electrones. Y respectivamente excitar los fósforos de tres colores R, G, B en la pantalla de fósforo para emitir luz de diferente brillo, y mediante la adición y mezcla para producir varios colores; el escáner también absorbe la luz del original reflejado o transmitido Componentes R, G, B y utilícelo para representar el color del original. El espacio de color RGB se denomina espacio de color relacionado con el dispositivo, porque diferentes escáneres escanean la misma imagen y obtendrán diferentes datos de imagen de color; diferentes modelos de monitores muestran la misma imagen, pero también tienen diferentes resultados de visualización de color. El espacio RGB utilizado por los monitores y escáneres es diferente del espacio del sistema de tres colores primarios reales RGB CIE 1931, que es un espacio de color independiente del dispositivo. por cierto: El selector de color de Photoshop. Se puede mostrar el valor de color de cada color en los espacios de color HSB, RGB, LAB y CMYK.
Espacio de color HSV
El modelo de espacio de color HSV (tono, saturación, valor) corresponde a un subconjunto en forma de cono en el sistema de coordenadas cilíndricas, y la superficie superior del cono corresponde a V = 1. Contiene R = 1, G = 1 en el RGB modelo, B = 1 Tres caras, los colores representados son más brillantes. El color H viene dado por el ángulo de rotación alrededor del eje V. El rojo corresponde a un ángulo de 0 °, el verde corresponde a un ángulo de 120 ° y el azul corresponde a un ángulo de 240 °. En el modelo de color HSV, cada color difiere de su color complementario en 180 °. La saturación S toma un valor de 0 a 1, por lo que el radio de la superficie superior del cono es 1. La gama de colores representada por el modelo de color HSV es un subconjunto del diagrama de cromaticidad CIE En este modelo, un color con una saturación del 100% tiene una pureza inferior al 100%. En el vértice (u origen) del cono, V = 0, H y S no están definidos y representan el negro. En el centro de la superficie superior del cono, S = 0, V = 1, H no está definido, lo que representa el blanco. Desde este punto hasta el origen, representa gris con brillo atenuado, es decir, gris con diferentes niveles de gris. Para estos puntos, S = 0 y el valor de H no está definido. Se puede decir que el eje V en el modelo HSV corresponde a la diagonal principal en el espacio de color RGB. El color de la circunferencia de la superficie superior del cono, V = 1, S = 1, este color es un color puro. El modelo HSV corresponde al método de combinación de colores del pintor. El pintor usa el método de cambiar la densidad del color y la profundidad del color para obtener diferentes tonos de colores de un cierto color puro, agregando blanco a un color puro para cambiar la densidad del color, agregando negro para cambiar la profundidad del color y agregando diferentes proporciones de blanco para obtener negro Varias tonalidades.
Espacio de color HSI
El espacio de color HSI comienza desde el sistema visual humano, utilizando tono (Hue), saturación de color (Saturación o Croma) y brillo (Intensidad o Brillo) para describir los colores. El espacio de color HSI se puede describir mediante un modelo de espacio cónico. Usar este modelo de cono para describir el espacio de color HIS es bastante complicado, pero realmente puede expresar los cambios de tono, brillo y saturación de color con mucha claridad. El tono y la saturación generalmente se denominan croma, que se usa para indicar el tipo y la profundidad del color. Dado que la visión humana es más sensible al brillo que a la densidad del color, para facilitar el procesamiento y el reconocimiento del color, el sistema visual humano a menudo utiliza el espacio de color HSI, que está más en línea con las características visuales humanas que el espacio de color RGB. Una gran cantidad de algoritmos en el procesamiento de imágenes y visión por computadora se pueden usar convenientemente en el espacio de color HSI, se pueden procesar por separado y son independientes entre sí. Por lo tanto, el espacio de color HSI puede simplificar enormemente la carga de trabajo del análisis y procesamiento de imágenes. El espacio de color HSI y el espacio de color RGB son simplemente representaciones diferentes de la misma cantidad física, por lo que existe una relación de conversión entre ellos.

El modelo de color HSI comienza desde el sistema visual humano, utilizando H para Hue, S para Saturación e I para Intensidad para describir colores. La saturación es inversamente proporcional a la cantidad de luz blanca de un color, y se puede decir que es un indicador de si el color es vivo o no. Por tanto, si usamos el modelo HIS en el monitor para procesar imágenes, podremos obtener resultados más realistas.
Tono: se refiere a la longitud de onda de la transmisión o reflexión de un objeto. Es más común identificarlo por colores como el rojo, naranja o verde, con un valor que va de 0 a 360 grados.
Saturación: también conocida como croma, se refiere a la intensidad o pureza de un color. La saturación representa la proporción de gris a tono y se mide desde 0% (gris) hasta 100% (completamente saturado).
Intensidad: se refiere al brillo relativo de un color, generalmente medido como un porcentaje del 0% (negro) al 100% (blanco).
Espacio de color YCrCb
YCrCb, o YUV, se utiliza principalmente para optimizar la transmisión de señales de video en color para que sea compatible con versiones anteriores de televisores en blanco y negro. En comparación con la transmisión de señales de video RGB, su mayor ventaja es que solo ocupa muy poco ancho de banda (RGB requiere que se transmitan tres señales de video independientes simultáneamente). Entre ellos, "Y" representa el brillo (luminancia o luma), que es el valor de la escala de grises; y "U" y "V" representan el croma (crominancia o crominancia), que se utiliza para describir el color y la saturación de la imagen. Especifique el color del píxel. El "brillo" se establece a través de la señal de entrada RGB al agregar partes específicas de la señal RGB. "Chroma" define dos aspectos de color-tono y saturación, que están representados por Cr y CB respectivamente. Entre ellos, Cr refleja la diferencia entre la parte roja de la señal de entrada RGB y el valor de brillo de la señal RGB. Y CB refleja la diferencia entre la parte azul de la señal de entrada RGB y el valor de brillo de la señal RGB. La importancia de utilizar el espacio de color YUV es que su señal de luminancia Y y las señales de crominancia U y V están separadas. Si solo hay un componente de señal Y pero no hay componentes U y V, entonces la imagen representada de esta manera es una imagen en escala de grises en blanco y negro. La televisión en color adopta el espacio YUV para resolver el problema de compatibilidad de la televisión en color y la televisión en blanco y negro con la señal de brillo Y, de modo que la televisión en blanco y negro también pueda recibir señales de televisión en color. La fórmula para convertir entre YUV y RGB es la siguiente (los valores RGB van de 0 a 255): Y = 0.299R + 0.587G + 0.114BU = -0.147R-0.289G + 0.436BV = 0.615R-0.515G- 0.100BR = Y + 1.14VG = Y-0.39U-0.58VB = Y + 2. 03U En DirectShow, los formatos RGB comunes son RGB1, RGB4, RGB8, RGB565, RGB555, RGB24, RGB32, ARGB32, etc .; los formatos YUV comunes son YUY2, YUYV, YVYU, UYVY, AYUV, Y41P, Y411, Y211, IF09, IYUV , YV12, YVU9, YUV411, YUV420, etc. El espacio YCrCb también se usa a menudo en la detección de rostros, porque las imágenes generales se basan en el espacio RGB. En el espacio RGB, el color de piel de una cara se ve muy afectado por el brillo, por lo que es difícil separar los puntos de color de piel de los puntos de color que no son de piel. Es decir, después de procesar en este espacio, los puntos de color de piel son puntos discretos con muchos colores que no son de piel incrustados en el medio, lo que trae dificultades para la calibración del área de color de piel (calibración de cara, ojos, etc.) . Si convierte el espacio RGB a YCrCb, puede ignorar la influencia de Y (brillo), porque este espacio se ve poco afectado por el brillo y los tonos de piel producirán una buena convergencia. De esta manera, el espacio tridimensional será CrCb bidimensional y los puntos de color de la piel formarán una determinada forma. Por ejemplo, si tienes un rostro humano, verás un área de un rostro humano y si tiene un brazo, verá la forma de un brazo. Está bien. Según la experiencia, el valor de CrCb de un cierto punto satisface: 133≤Cr≤173, 77≤Cb≤127, entonces este punto se considera como un punto de color de piel y los demás son puntos de color que no son de piel.
El espacio de color YCrCb tiene un buen efecto en la detección del color de la piel. Es mejor que el espacio de color HSV.
Al buscar algunos datos en línea, sabemos que el componente Cr de la raza amarilla normal es aproximadamente 140 ~ 175, y el componente Cb es alrededor de 100 ~ 120. entre.
Blog de referencia: espacio de color YCrCb y detección de tono de piel

La diferencia entre YCbCr y YUV El
modelo de color yuv se deriva del modelo rgb, que se caracteriza por separar el brillo y el croma, que es adecuado para el procesamiento de imágenes.

El modelo YCbCr se deriva del modelo yuv, aplicado a video digital, recomendación ITU-R BT.601

Mediante la comparación anterior, podemos confirmar que el yuv que usamos en estándares de codificación como h.264 y mpeg es en realidad YcbCr. No se confunda con el nombre.
Para utilizar las características del ángulo de visión de las personas para reducir la cantidad de datos, la imagen en color representada por el espacio RGB generalmente se convierte a otros espacios de color. Actualmente se utilizan tres transformaciones de espacio de color: YIQ, YUV e YCrCb. Cada espacio de color produce una señal de componente de luminancia y dos señales de componente de crominancia, y los parámetros utilizados en cada transformación se adaptan a un determinado tipo de dispositivo de visualización. Entre ellos, YIQ es adecuado para el sistema de TV en color NTSC, YUV es adecuado para el sistema de TV en color PAL y SECAM, y YCrCb es adecuado para monitores de computadora.

YUV no es una combinación de esas palabras en inglés, sino un símbolo. Y representa brillo, UV se usa para representar la diferencia de color y U y V son los dos componentes del color.

Ventajas de YUV:
1. La importancia de la notación YUV es que su señal de luminancia (Y) y la señal de crominancia (U, V) son independientes entre sí.
2. Otra ventaja de la notación YUV es que puede utilizar las características del ojo humano para reducir la capacidad de almacenamiento requerida para imágenes digitales en color.

YCbCr donde Y se refiere al componente de luminancia, Cb se refiere al componente de crominancia azul y Cr se refiere al componente de crominancia rojo.
YCbCr es parte de la recomendación ITU-R BT1601 durante el desarrollo del estándar de video de la Organización Digital Mundial, en realidad es una réplica a escala y offset de YUV. Entre ellos, Y tiene el mismo significado que Y en YUV. Cb y Cr también se refieren al color, pero son diferentes en el método de representación. En la familia YUV, YCbCr es el miembro más utilizado en los sistemas informáticos y tiene una amplia gama de aplicaciones, tanto JPEG como MPEG utilizan este formato. En términos generales, YUV se refiere principalmente a YCbCr. YCbCr tiene muchos formatos de muestreo, como 4: 4: 4, 4: 2: 2, 4: 1: 1 y 4: 2: 0.

En segundo lugar, llame a la función de conversión para lograr la conversión del espacio de color de la imagen

el código se muestra a continuación:

import cv2 as cv  #导入cv模块

#色彩空间的转换
def color_space_demo(image):
    gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)#RGB转换为gray
    cv.imshow("gray", gray)
    hsv = cv.cvtColor(image, cv.COLOR_BGR2HSV)#RGB转换为hsv
    cv.imshow("hsv", hsv)
    yuv = cv.cvtColor(image, cv.COLOR_BGR2YUV)#RGB转换为yuv
    cv.imshow("yuv", yuv)
    ycrcb = cv.cvtColor(image, cv.COLOR_BGR2YCrCb)#RGB转换为ycrcb
    cv.imshow("ycrcb", ycrcb)

src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
#blue green red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  #创建一个GUI
cv.imshow("input image", src) #对窗口图片进行展示
color_space_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()  #释放所有的内存

Ejecute la captura de pantalla:
Inserte la descripción de la imagen aquíDescripción del espacio de color HSV:
H: 0-180 S: 0-255 V: 0-255
Puede filtrar otros colores
Color HSV correspondiente al rango del componente RGB del color correspondiente en la siguiente tabla
Inserte la descripción de la imagen aquí

3. Conversión de espacio de color, use la función inRange para filtrar los colores en el video para realizar el seguimiento de un determinado color

el código se muestra a continuación:

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) #转换色彩空间为hsv
        #设置绿色的范围,跟踪视频中的绿色
        lower_hsv = np.array([37, 43, 46])#设置过滤的颜色的低值
        upper_hsv = np.array([77, 255, 255])#设置过滤的颜色的高值
        mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv)#调节图像颜色信息(H)、饱和度(S)、亮度(V)区间,选择绿色区域
        cv.imshow("video", frame)
        cv.imshow("mask", mask)
        c = cv.waitKey(40)
        if c == 27:
            break

extrace_object_demo()
cv.waitKey(0)
cv.destroyAllWindows()

Ejecutar captura de pantalla: la
Inserte la descripción de la imagen aquífunción inRange es muy simple. Hay tres
parámetros. El primer parámetro: hsv se refiere a la imagen original. El
segundo parámetro: lower_red se refiere al valor inferior a este lower_red en la imagen. El valor de la imagen se convierte en 0, que es el negro
primero. Tres parámetros: upper_red se refiere al valor más alto que este upper_red en la imagen, el valor de la imagen se convierte en 0
y el valor entre lower_red ~ upper_red se convierte en 255, que es blanco

Cuatro, separación de canales, fusión, modificar un canal

Función involucrada:
split () divide la imagen en color en 3 canales
fusionar () fusionar canales El
código es el siguiente:

import cv2 as cv
import numpy as np
 
 
src = cv.imread("C:/Users/lenovo/Desktop/opencv/daima/banknum/template-matching-ocr/images/lena.jpg")  #读取图片位置
#blue green red
cv.namedWindow("input image", cv.WINDOW_AUTOSIZE)  #创建一个GUI
cv.imshow("input image", src) #对窗口图片进行展示
 
#通道分离,输出三个单通道图片
b, g, r = cv.split(src)#将彩色图像分割成3个通道
cv.imshow("blue", b)
cv.imshow("green", g)
cv.imshow("red", r)
 
#通道合并
src = cv.merge([b, g, r]) #将三个通道进行合并
cv.imshow("changed image", src)
 
#修改某个通道的值
src[:, :, 2] = 0 #将红色通道改为0
cv.imshow("single", src)
 
cv.waitKey(0)
cv.destroyAllWindows()

Ejecutar captura de pantalla:
Inserte la descripción de la imagen aquí

Supongo que te gusta

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