Convertir imagen a YUV usando OpenCV

Sahil Bhosale 21 junio 2023
  1. Modelo de color YUV en una imagen usando OpenCV
  2. Conclusión
Convertir imagen a YUV usando OpenCV

YUV es un modelo de color similar a los formatos de imagen RGB y BGR. En YUV, el componente (Y) define la luminancia (brillo) de una imagen y los otros dos componentes, que también se conocen como componentes de crominancia (U) y (V), definen la proyección azul y proyección roja, respectivamente.

En este artículo, veremos qué es YUV y cómo implementar el modelo de color YUV en una imagen usando OpenCV.

Modelo de color YUV en una imagen usando OpenCV

YUV codifica una imagen en color o un video relacionado con la percepción humana y permite su ancho de banda reducido para los componentes de crominancia en comparación con una representación RGB “directa”. Es un modelo comúnmente utilizado como parte de una canalización de imágenes en color.

Históricamente, los términos YUV y Y′UV se usaban para una codificación analógica particular de información de color en sistemas de televisión.

En las primeras etapas, los televisores analógicos usaban el espacio de color YUV para generar imágenes/videos en escala de grises. Esos televisores analógicos se utilizan para eliminar los componentes U y V de YUV para producir imágenes/videos en blanco y negro en la pantalla.

Los valores de U y V van de -128 a +127 (para enteros con signo) y de 0 a +255 (para enteros sin signo).

Obtendremos una imagen en escala de grises si eliminamos los componentes U y V. U y V son matrices de color.

Ahora profundicemos en la sintaxis y veamos algunos ejemplos.

Sintaxis:

cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

Parámetros:

  1. img - La imagen se almacena en la variable img para ser convertida.
  2. cv2.COLOR_BGR2RGB: la imagen BGR se convierte en una imagen RGB.
  3. cv2.COLOR_RGB2YUV: la imagen RGB se convierte en imagen YUV.

Ahora que hemos visto la sintaxis, veamos cómo funciona y se implementa en OpenCV.

Lo bueno de usar OpenCV es que está diseñado específicamente para aplicaciones de procesamiento de imágenes y visión por computadora, por lo que es bueno para realizar varios procesamientos en una imagen.

Comprendamos cómo usar YUV en OpenCV con un ejemplo a continuación.

Primero, debemos importar el módulo OpenCV, cargar nuestra imagen usando la función imread() y almacenarla dentro de una variable llamada img. Para este ejemplo, hemos tomado una imagen de un coche en formato jpg.

Fragmento de código:

# Import opencv library
import cv2 as cv

# Load the image into a variable using the imread function.
img = cv.imread("car.png")

# Converting the image from BGR to RGB since OpenCV generally uses BGR image format.
img_rgb = cv.cvtColor(img, cv.COLOR_BGR2RGB)

# Now converting the image from RGB to YUV
img_yuv = cv.cvtColor(img_rgb, cv.COLOR_RGB2YUV)

# Showing all the images
cv.imshow("RGB Image", img_rgb)
cv.imshow("YUV Image", img_yuv)
cv.imshow("Original Image", img)
cv.waitKey(0)
cv.destroyAllWindows()

Luego convertimos la imagen usando el método cv.cvtcolor() para cambiar el color de las imágenes a varios parámetros. Como OpenCV usa el formato BGR para imágenes, necesitamos convertir este formato a algún otro formato.

Entonces, ahora convertiremos nuestra imagen original de formato BGR a RGB pasando el cv.COLOR_BGR2RGB al segundo parámetro del método cv.cvtcolor(). Como queremos convertir nuestra imagen a YUV, cambiaremos la imagen de formato RGB a YUV pasando el parámetro cv.COLOR_RGB2YUV al método cv.cvtcolor().

Aquí, también podemos pasar el parámetro cv.COLOR_BGR2YUV para realizar directamente una conversión de la imagen BGR a YUV. Estamos haciendo un largo camino para comprender mejor RGB y YUV.

Para obtener más información, visite los documentos oficiales.

Por último, utilizaremos la función imshow() para mostrar todas las imágenes en pantalla.

Producción:

yuv opencv

Conclusión

Como se mencionó anteriormente, el problema con RGB es que es terrible para mapear la percepción visual, pero YUV es más eficiente que RGB para este propósito. Por eso usamos YUV debido a su componente vital, la luminancia.

Por lo tanto, usando las formas anteriores, podemos convertir las imágenes a YUV y viceversa con y sin usar OpenCV.

Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn