Lo primero que debemos hacer es incluir dos bibliotecas: cv2 y matplotlib.pyplot. Para simplificar el código a la hora de utilizar la segunda, le asignaremos el nombre plt.
import cv2
import matplotlib.pyplot as plt
Al igual que hicimos en el post anterior, leemos la imagen y utilizaremos split() para separar los tres canales: B, G y R. Es importante realizar la transformación de RGB (formato que utilizamos habitualmente) a BGR (el que utiliza openCV). Lo haremos de la siguiente forma:
B, G, R = cv2.split(img_color)
img_RGB=cv2.cvtColor(img_color,cv2.COLOR_RGB2BGR)
Finalmente mostramos las imágenes que queramos en el plot, en mi caso mostraré la imagen RGB y los tres canales. Las visualizaré en dos filas y dos columnas, formando así un cuadrado. Esto lo conseguiremos con el método subplot(filas, columnas, posición del elemento). Después indicaremos el nombre de la imagen que queremos representar, junto con su título.
plt.subplot(2,2,1), plt.imshow(img_RGB)
plt.title('Color')
En mi caso no quiero mostrar la escala de las imágenes 'img_RGB', 'B' y 'G', por ello, pondré a False el método axis(). En la imagen 'R' sí que mostraré la escala.
plt.axis(False)
Código completo:
import cv2
import matplotlib.pyplot as plt
img_color = cv2.imread('Bandera.png')
B, G, R = cv2.split(img_color)
#De RGB a BGR
img_RGB=cv2.cvtColor(img_color,cv2.COLOR_RGB2BGR)
plt.subplot(2,2,1), plt.imshow(img_RGB)
plt.title('Color')
plt.axis(False)
plt.subplot(2,2,2), plt.imshow(B, 'gray')
plt.title('Blue')
plt.axis(False)
plt.subplot(2,2,3), plt.imshow(G, 'gray')
plt.title('Green')
plt.axis(False)
plt.subplot(2,2,4), plt.imshow(R, 'gray')
plt.title('Red')
Representación en el plot: