Saltar al contenido

¿Por qué cv2.imwrite() cambia el color de las fotos?

No dudes en compartir nuestra página y códigos con otro, necesitamos de tu ayuda para ampliar esta comunidad.

Solución:

Tu problema está en el hecho de que skimage.io.imread carga la imagen como RGB (o RGBA), pero OpenCV asume que la imagen es BGR o BGRA (BGR es el formato de color predeterminado de OpenCV). Esto significa que los aviones azul y rojo se voltean.


Imágenes de 3 canales

Probemos esto con la siguiente imagen de prueba simple:

Imagen de entrada


Primero probemos tu algoritmo original:

import skimage.io
import cv2

img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_1.png', img)

Obtenemos el siguiente resultado:

resultado 1

Como puede ver, los canales rojo y azul están visiblemente intercambiados.


El primer enfoque, suponiendo que aún desee usar skimage para leer y cv2 para escribir, es usar cv2.cvtColor para convertir de RGB a BGR.

Dado que los nuevos documentos de OpenCV no mencionan la sintaxis de Python, en este caso también puede usar la referencia adecuada para 2.4.x.

import skimage.io
import cv2

img = skimage.io.imread('sample.png')
cv2.imwrite('sample_out_2.png', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))    

Ahora obtenemos la siguiente salida:

resultado 2


Una alternativa es simplemente usar OpenCV — use cv2.imread para cargar la imagen. En este caso estamos trabajando solo con imágenes BGR.

NÓTESE BIEN: No proporcionar ninguna bandera significa cv2.IMREAD_COLOR se usa de forma predeterminada, es decir, la imagen siempre se carga como una imagen de 3 canales (eliminando cualquier canal alfa potencial).

import cv2

img = cv2.imread('sample.png')
cv2.imwrite('sample_out_3.png', img)

resultado 3


Imágenes de 4 canales

De su captura de pantalla, parece que tiene una imagen de 4 canales. Esto significaría RGBA en skimage y BGRA en OpenCV. Los principios serían similares.

  • Utilice el código de conversión de color cv2.COLOR_RGBA2BGRA
  • O usar cv2.imread con bandera cv2.IMREAD_UNCHANGED

Sección de Reseñas y Valoraciones

Si piensas que te ha resultado de ayuda nuestro artículo, sería de mucha ayuda si lo compartes con otros entusiastas de la programación y nos ayudes a extender esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *