Menú principal

miércoles, 10 de febrero de 2021

Acceso a canales de imagen con índices (matrices) - Python

Con el código que realizaremos obtendremos el mismo resultado que en el post anterior, con la diferencia de que en este caso no utilizaremos el método split() para obtener los tres canales de la imagen. Para ello, trabajaremos con matrices de tal forma que cada canal será el correspondiente a un índice.

Es importante recordar que internamente openCV no trabaja con RGB si no con BGR, por lo tanto el primer canal será el azul, el segundo el verde y el tercero el rojo. Para seleccionar estos, asignaremos a la variable B (blue) aquella matriz de la imagen correspondientes a todas las filas (:), todas las columnas (:) y el primer canal (0). Análogamente declararemos las variables G (green) y R (red).

M = cv2.imread('parchis.jpg')
B = M[:,:,0]
G = M[:,:,1]
R = M[:,:,2]

Posteriormente las mostraremos en el plot en 1 fila y 5 columnas. En mi caso en primer lugar he representado la imagen de la que partimos RGB, fusionando los tres canales con el método merge(). Al tener los tres canales separador, podremos generar una imagen con el orden de canales que queramos, en mi caso he representado también la imagen con el orden BGR.

Código completo:

import cv2
import matplotlib.pyplot as plt

M = cv2.imread('parchis.jpg')

#Acceso a canales con indices
B = M[:,:,0]
G = M[:,:,1]
R = M[:,:,2]


plt.subplot(1,5,1), plt.imshow(cv2.merge([R,G,B]))
plt.title('RGB')
plt.axis(False)

plt.subplot(1,5,2), plt.imshow(R, 'gray')
plt.title('Red')
plt.axis(False)

plt.subplot(1,5,3), plt.imshow(G, 'gray')
plt.title('Green')
plt.axis(False)

plt.subplot(1,5,4), plt.imshow(B, 'gray')
plt.title('Blue')
plt.axis(False)

plt.subplot(1,5,5), plt.imshow(cv2.merge([B,G,R]))
plt.title('BGR')
plt.axis(False)

Resultado obtenido:



No hay comentarios:

Publicar un comentario