Menú principal

martes, 9 de febrero de 2021

Separar canales BGR con split - Python

En primer lugar, importamos la biblioteca cv2 y cargamos una imagen a color, en mi caso se trata de la bandera de Namibia. 

import cv2
img_color = cv2.imread('Bandera.png')

Posteriormente utilizamos el método split() para separar la imagen en tres canales: azul (B), verde (G) y rojo (R). Normalmente los canales se toman en el orden RGB pero es importante tener en cuenta que openCV los invierte resultando BGR, por lo tanto tomaremos este último orden.

B, G, R = cv2.split(img_color) 

Mostramos las imágenes generadas por pantalla como ventanas emergentes:

cv2.imshow('Color',img_color)
cv2.imshow('Azul',B)
cv2.imshow('Verde',G)
cv2.imshow('Rojo',R)

cv2.waitKey(0)
cv2.destroyAllWindows()

Vemos como se aclara las zonas en las cuales el color coincide con el canal, es decir, si tomamos el canal azul, se aclaran aquellas zonas que en la imagen original son azules. Además se puede apreciar como el color amarillo correspondiente al sol de la bandera es una mezcla de verde y rojo (más rojo que verde). Esto se puede deducir ya que en las imágenes correspondientes a estos canales el sol sale con un tono muy claro (cuanto más claro, más componente del color del canal tratado).

Finalmente guardamos las imágenes:

cv2.imwrite('imgAzul.png',B)
cv2.imwrite('imgVerde.png',G)
cv2.imwrite('imgRojo.png',R)

Programa completo:

import cv2

img_color = cv2.imread('Bandera.png')

#Generar imagenes B, G, R
B, G, R = cv2.split(img_color) 

cv2.imshow('Color',img_color)
cv2.imshow('Azul',B)
cv2.imshow('Verde',G)
cv2.imshow('Rojo',R)

cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imwrite('imgAzul.png',B)
cv2.imwrite('imgVerde.png',G)
cv2.imwrite('imgRojo.png',R)

Resultado final:



No hay comentarios:

Publicar un comentario