Algunas conversiones de espacio de color en OpenCV

En OpenCV, cv2.COLOR_ es una constante que se utiliza para representar la conversión del espacio de color. Estas constantes definen diferentes códigos de conversión de espacios de color que se pueden utilizar en el procesamiento de imágenes.

Las siguientes son algunas constantes cv2.COLOR_ de uso común:

cv2.COLOR_BGR2GRAY: convierte la imagen en color BGR a una imagen en escala de grises.
cv2.COLOR_BGR2RGB: convierte la imagen en color BGR a una imagen en color RGB.
cv2.COLOR_BGR2HSV: convierte imágenes en color BGR al espacio de color HSV.
cv2.COLOR_BGR2Lab: convierte la imagen en color BGR al espacio de color Lab.
cv2.COLOR_RGB2GRAY: convierte una imagen en color RGB a una imagen en escala de grises.
cv2.COLOR_RGB2BGR: convierte una imagen en color RGB a una imagen en color BGR.
cv2.COLOR_RGB2HSV: convierte imágenes en color RGB al espacio de color HSV.
cv2.COLOR_RGB2Lab: convierte una imagen en color RGB al espacio de color Lab.
cv2.COLOR_GRAY2BGR: convierte una imagen en escala de grises a una imagen en color BGR.
cv2.COLOR_GRAY2RGB: convierte una imagen en escala de grises a una imagen en color RGB.
cv2.COLOR_HSV2BGR: convierte la imagen del espacio de color HSV en una imagen de color BGR.
cv2.COLOR_HSV2RGB: convierte la imagen del espacio de color HSV en una imagen de color RGB.

El código y el principio de implementación específicos son los siguientes:

cv2.COLOR_BGR2GRAY
Al convertir una imagen en color a escala de grises usando cv2.COLOR_BGR2GRAY en OpenCV, puede usar el siguiente código:

import cv2
# 读取彩色图像
image = cv2.imread('color_image.jpg')
# 将彩色图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 显示灰度图像
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Principio:
cuando se utiliza cv2.COLOR_BGR2GRAY para convertir una imagen en color a una imagen en escala de grises, realiza la conversión según el principio de percepción del brillo. Una imagen en escala de grises es una imagen de un solo canal en la que el valor de cada píxel representa el valor de brillo del píxel y no contiene información de color. Durante el proceso de conversión, se utiliza la siguiente fórmula matemática para calcular el valor de gris de cada píxel:
Gris = 0,299 × R + 0,587 × G + 0,114 × B Gris = 0,299\times R+0,587\times G+0,114\times Bgris _ _ _=0,299×R+0.587×GRAMO+0.114×BEsta
fórmula se basa en el peso de percepción del ojo humano de diferentes colores, porque el ojo humano es más sensible al verde y menos sensible al rojo y al azul.
Los pasos específicos son los siguientes:
Lea la imagen en color.
Iterar sobre cada píxel de la imagen.
Para cada píxel, el valor de la escala de grises se calcula según la fórmula anterior.
Asigne el valor de escala de grises calculado al píxel en la posición correspondiente de la imagen en escala de grises.
La imagen final en escala de grises contiene la información de brillo de la imagen, pero elimina la información de color.
De esta manera, con cv2.COLOR_BGR2GRAY, puede convertir una imagen en color en una imagen en escala de grises y centrarse más en las características de brillo de la imagen.

cv2.COLOR_BGR2RGB
Aquí hay un código de muestra para convertir una imagen del formato BGR al formato RGB usando OpenCV:

import cv2
# 读取图像
image_bgr = cv2.imread('input_image.jpg')
# 将图像从 BGR 格式转换为 RGB 格式
image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB)
# 显示原始图像和转换后的图像
cv2.imshow('Original Image', image_bgr)
cv2.imshow('RGB Image', image_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()

Principio:
en OpenCV, BGR (azul, verde y rojo) y RGB (rojo, verde y azul) son dos métodos de representación de imágenes comúnmente utilizados. BGR es el formato de imagen predeterminado de OpenCV, mientras que RGB es el formato de imagen con el que la gente generalmente está más familiarizada y más utilizada.
En la conversión de BGR a RGB, cambiará el orden de los canales de color de cada píxel, es decir, el canal azul en la imagen original Azul AzulCanal azul y rojoR ed RojoRojo realiza un intercambio y mantiene el canal verde Verde VerdeEl verde permanece sin cambios . Esto convierte imágenes del formato BGR al formato RGB.
La fórmula matemática para la conversión es la siguiente:
R _ nuevo = B , G _ nuevo = G , B _ nuevo = RR\_nuevo = B,G\_nuevo = G,B\_nuevo = RR _ nuevo _ _=B ,G _ nuevo _ _=GRAMO ,B _ nuevo _ _=R
其中,R _ nuevo = B 、 G _ nuevo = G 、 B _ nuevo = RR\_nuevo = B、G\_nuevo = G、B\_nuevo = RR _ nuevo _ _=B G _ n e w=G B _ n e w=R representa los valores de píxeles de los canales rojo, verde y azul en la imagen RGB convertida respectivamente. A través de esta conversión, podemos procesar imágenes en formato RGB de manera más conveniente, porque el formato RGB es más consistente con la percepción humana y las representaciones de color de uso común.

cv2.COLOR_BGR2HSV
Al convertir una imagen BGR a una imagen HSV, debe usar la función cv2.cvtColor() de OpenCV y configurar el código de conversión en cv2.COLOR_BGR2HSV. Aquí hay un ejemplo de código más detallado:

import cv2
# 读取图像
bgr_image = cv2.imread('image.jpg')
# 将 BGR 图像转换为 HSV 图像
hsv_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2HSV)
# 显示原始图像和转换后的图像
cv2.imshow('BGR Image', bgr_image)
cv2.imshow('HSV Image', hsv_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

HSV es un espacio de color donde H significa tono tonoh u e , S representa saturaciónsaturacións a t u r a t i o n , V representael valorvalor . _ _ _ _ Esto es diferente del espacio de color BGR, lo que significa que los colores de la imagen están compuestos de azulAzulAzul , Verde , Verde,VerdeVerde y rojoRed RojoLa combinación de R e d . En el espacio HSV, el valor de un color está representado por tres parámetros: tono (H), saturación (S) y brillo (V). El espacio HSV es más consistente con la percepción humana del color, por lo que en algunas tareas de procesamiento de imágenes, tiene más sentido convertir imágenes al espacio HSV. Tenga en cuenta que el rango de valores de píxeles en la imagen HSV convertida es diferente. El rango de valores de H (tono) es [0, 179], y el rango de valores de S (saturación) y V (luminosidad) es [0, 255]. Por lo tanto, si desea obtener o modificar valores de píxeles en la imagen convertida, debe considerar las limitaciones de estos rangos.
Principio:
HSV (tono, saturación, brillo) es un espacio de color. El espacio de color BGR (azul, verde, rojo) se convierte en espacio de color HSV mediante la siguiente fórmula matemática: 1. Valores RGB normalizados: convierte la imagen BGR en el
píxel El valor de cada canal se divide por 255, de modo que el rango de valores de cada canal está entre [0, 1].
R ′ = R 255 , G ′ = G / 255 , B ′ = B / 255 R' = R255,G' = G /255,B' = B/255R=255 rands ,GRAMO=G /255 ,B=B /255 2. Calcular los valores máximo y mínimo: encontrar el valor máximo M ax Max
entre los valores RGB normalizadosM a x y el valor mínimoM en MinM en
M ax = max ( R ′ , G ′ , B ′ ) , M in = min ( R ′ , G ′ , B ′ ) Max = max(R', G', B'),Min = min( R', G', B')máx . _=máximo ( R _ ,GRAMO ,B ),M en=mi ( r. ,GRAMO ,B )
3. Calcular el tono (H):
SiMax = M en Max=Minmáx . _=M en , entonces el tonoH = 0 H=0h=0 .
SiMáx = R ′ Máx=R'máx . _=R,且G ′ > = B ′ G' >= B'GRAMO>=B , entonces el tonoH = ( 60 ∗ ( G ′ − B ′ ) ) / ( M ax − M in ) + 0 H= (60 * (G' - B')) / (Max - Min)+0h=( 60( GRAMOB ))/(Máx_M en )+0 .
SiMáx = R ′ Máx=R'máx . _=R,且G ′ < B ′ G' < B'GRAMO<B , entonces el tonoH = ( 60 ∗ ( G ′ − B ′ ) ) / ( M ax − M in ) + 360 H=(60 * (G' - B')) / (Max - Min) + 360h=( 60( GRAMOB ))/(Máx_M en )+360 .
SiMáx = G ′ Máx=G'máx . _=GRAMO , entonces el tonoH = ( 60 ∗ ( B ′ − R ′ ) ) / ( M ax − M in ) + 120 H=(60 * (B' - R')) / (Max - Min) + 120h=( 60( BR ))/(Máx_M en )+120 .
SiMáx = B ′ Máx=B'máx . _=B , entonces el tonoH = ( 60 ∗ ( R ′ − G ′ ) ) / ( M ax − M in ) + 240 H=(60 * (R' - G')) / (Max - Min) + 240h=( 60( r.GRAMO ))/(Máx_M en )+240 .
El rango de valores del tono H aquí es [0, 360].
4. Calcular saturación (S):
siMax = 0 Max=0máx . _=0 , entonces la saturaciónS = 0 S=0S=0 .
Si¡Máx! = 0 ¡Máx!=0¡ Máx ! _=0 , entonces la saturaciónS = ( M ax − M in ) / M ax S = (Max - Min) / MaxS=( Máx _ _M en ) / Máx . _ _
El rango de valores de la saturación S aquí es [0, 1].
5. Calcule el brillo (V): el brillo V es máx.
El rango de valores de la luminosidad V aquí es [0, 1].
Con estas fórmulas, los valores de píxeles en el espacio de color BGR se pueden convertir en valores de tono, saturación y brillo en el espacio de color HSV. Esto completa la conversión del espacio de color de BGR a HSV.

cv2.COLOR_BGR2Lab
Aquí está el código para convertir una imagen del espacio de color BGR al espacio de color Lab usando OpenCV:

import cv2
# 读取图像
image_bgr = cv2.imread('image.jpg')
# 将BGR图像转换为Lab图像
image_lab = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2Lab)
# 显示原始图像和转换后的图像
cv2.imshow('BGR Image', image_bgr)
cv2.imshow('lab Image', image_lab)
cv2.waitKey(0)
cv2.destroyAllWindows()

El espacio de color Lab es un modelo de color que contiene tres componentes: brillo (L), canales rojo y verde (a) y canales azul y amarillo (b). Al convertir la imagen de BGR a Lab, la información de color se puede separar en dos canales independientes de brillo y color, lo que facilita algunas tareas de procesamiento de imágenes.
El principio de convertir una imagen del espacio de color BGR al espacio de color Lab implica múltiples fórmulas matemáticas y matrices de transformación. La siguiente es una fórmula matemática que explica este proceso:
Primero, representamos los tres canales (azul, verde y rojo) en el espacio de color BGR como vectores, denotados [B, G, R].
Luego, calculamos la transformación lineal correspondiente mediante la siguiente fórmula:
X = R / 255.0 , Y = G / 255.0 , Z = B / 255.0X=$ 255.0 ,Y=G /255,0 ,z=B /255.0
donde X, Y y Z son valores normalizados en el espacio de color RGB.
A continuación, convertimos el espacio de color RGB al espacio de color XYZ utilizando la siguiente multiplicación de matrices:

[ X ]     [ 0.412453  0.357580  0.180423 ]   [ R ]
[ Y ]  =  [ 0.212671  0.715160  0.072169 ] * [ G ]
[ Z ]     [ 0.019334  0.119193  0.950227 ]   [ B ]

Entre ellos, la matriz de la izquierda es la matriz de transformación y el vector de la derecha es el valor normalizado RGB.
A continuación, calculamos los componentes L, a y b en el espacio de color Lab mediante la siguiente fórmula:

L = f(Y / Yn)
a = f((X / Xn) - (Y / Yn))
b = f((Y / Yn) - (Z / Zn))

Estas fórmulas describen el proceso de convertir valores XYZ normalizados en componentes L, ayb en el espacio de color Lab.
El componente L representa el brillo. Según la fórmula L = f(Y / Yn), se calcula dividiendo el valor Y normalizado por Yn y aplicando una función de conversión f. La función de conversión f es una función no lineal que se utiliza para ajustar la percepción del brillo. Generalmente toma la forma de una función logarítmica u otro mapeo adecuado.
El componente a representa el rango de verde a rojo. Según la fórmula a = f((X / Xn) - (Y / Yn)), se calcula dividiendo el valor X normalizado por Xn, dividiendo el valor Y normalizado por Yn y luego calculando la diferencia entre los dos. Y aplique la función de conversión f para obtenerlo. Esta diferencia representa el desplazamiento del componente rojo con respecto al punto blanco de referencia.
El componente b representa el rango del azul al amarillo. Según la fórmula b = f((Y / Yn) - (Z / Zn)), se calcula dividiendo el valor Y normalizado por Yn, dividiendo el valor Z normalizado por Zn y luego calculando la diferencia entre los dos. Y aplique la función de conversión f para obtenerlo. Esta diferencia representa el desplazamiento del componente amarillo con respecto al punto blanco de referencia.
Yn, Xn y Zn en estas fórmulas son valores de referencia de punto blanco en el espacio de color Lab, que se utilizan para normalizar los valores XYZ para garantizar la coherencia en la conversión del espacio de color. La función de conversión f se puede elegir según estándares de espacio de color específicos para cumplir con los requisitos de percepción de brillo y cromaticidad. La implementación específica de estas fórmulas se puede lograr mediante funciones en bibliotecas de programación relacionadas (como OpenCV).

cv2.COLOR_GRAY2BGR
cv2.COLOR_GRAY2BGR es un código de conversión de color que convierte imágenes en escala de grises a imágenes en color BGR.

import cv2
# 读取灰度图像
gray_image = cv2.imread('gray_image.jpg', cv2.IMREAD_GRAYSCALE)
# 将灰度图像转换为 BGR 彩色图像
bgr_image = cv2.cvtColor(gray_image, cv2.COLOR_GRAY2BGR)
# 显示 BGR 彩色图像
cv2.imshow('BGR Image', bgr_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.COLOR_GRAY2BGR es una conversión de color que convierte imágenes en escala de grises a imágenes en color BGR. La siguiente es la fórmula matemática que explica esta conversión de color:
Suponga que el valor de píxel de la imagen en escala de grises de entrada es G y el valor de píxel de la imagen en color BGR es (B, G, R).
Dado que las imágenes en escala de grises tienen un solo canal, al convertir a una imagen en color BGR, a cada valor de píxel se le debe asignar el mismo valor que a los componentes B, G y R. Por lo tanto, el valor del canal G se copia a los canales B, G y R durante el proceso de conversión, manteniendo la coherencia de los valores de los píxeles.
La fórmula matemática es la siguiente:
B = G
G = G
R = G
Esto significa que durante el proceso de conversión, los valores B, G y R de cada píxel de la imagen en color BGR son iguales a los valores de píxel de la imagen de entrada en escala de grises.
A través de este proceso de conversión, una imagen en escala de grises puede aparecer como una imagen en color, pero como los valores B, G y R de cada píxel son los mismos, la imagen se ve en escala de grises sin efectos de color.
Esta conversión se utiliza a menudo cuando el marcado de color se realiza en una imagen en escala de grises o cuando la imagen necesita convertirse a un formato de color durante el procesamiento de la imagen.

cv2.COLOR_HSV2BGR

import cv2
import numpy as np
# 读取HSV彩色图像
hsv_image = cv2.imread('input_image.jpg', cv2.IMREAD_COLOR)
# 将HSV图像转换为BGR彩色图像
bgr_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
# 显示BGR彩色图像
cv2.imshow('BGR Image', bgr_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

HSV (Tono-Saturación-Valor) es un método de representación de color comúnmente utilizado, en el que el tono (Tono), la saturación (Saturación) y el brillo (Valor) representan respectivamente diferentes atributos de color. BGR (Azul-Verde-Rojo) es un método de representación de imágenes en color comúnmente utilizado en computadoras.
La función cv2.COLOR_HSV2BGR se utiliza para convertir imágenes HSV en imágenes BGR. El proceso de conversión específico se puede expresar mediante la siguiente fórmula matemática:
para una imagen HSV, suponga que H es el tono, S es la saturación y V es el brillo. Para la imagen BGR correspondiente, suponga que B es el canal azul, G es el canal verde y R es el canal rojo.
Durante el proceso de conversión, se debe considerar el rango de normalización y la relación de mapeo entre HSV y BGR.
Rango de normalización:
el rango de H es [0, 360], convertido a [0, 179], como valor de tono de la imagen BGR.
El rango de S es [0, 1], no se requiere conversión y se utiliza directamente como valor de saturación de la imagen BGR.
El rango de V es [0, 1], no se requiere conversión y se utiliza directamente como valor de brillo de la imagen BGR.
Relación de mapeo:
al convertir H al valor de tono de una imagen BGR, se requiere un mapeo normalizado. La relación de mapeo es: B = H * 2, G = H * 2 - 1, R = H * 2 - 2. Entre ellos, los rangos de B, G y R son [0, 255].
La saturación y el brillo se utilizan directamente como valores de canal correspondientes de la imagen BGR, que van desde [0, 255].
En resumen, el principio de cv2.COLOR_HSV2BGR es convertir cada píxel de la imagen HSV de acuerdo con la fórmula matemática anterior para obtener la imagen BGR correspondiente. Esto logra la conversión del espacio de color de HSV a BGR

Supongo que te gusta

Origin blog.csdn.net/qq_50993557/article/details/130714267
Recomendado
Clasificación