Búsqueda de sitios web

Dividir y fusionar canales con OpenCV Python


Una imagen en color digital estándar está representada por píxeles y cada píxel es una combinación de colores primarios. Y un canal es una imagen en escala de grises que se compone solo de uno de los colores primarios de una imagen en color. Por ejemplo, una imagen RGB tiene tres canales: rojo, verde y azul.

Observe las siguientes imágenes en color para ver cómo se ve cada canal por separado:

Debajo de las imágenes en escala de grises se encuentra la representación de cada canal de la imagen RGB.

En este artículo, discutiremos cómo dividir y fusionar canales de una imagen usando la biblioteca Python openCV.

Dividir canales

El módulo Python OpenCV proporciona una función cv2.split() para dividir una matriz multicanal/coloreada en matrices separadas de un solo canal. Devolverá una matriz con los tres canales, cada uno de los cuales corresponde a los canales azul, verde y rojo representados como una matriz estándar con dos dimensiones.

Sintaxis

cv2.split(m[, mv])

Dónde,

  • src: entrada de matriz multicanal.

  • mv – matriz de salida o vector de matrices

Ejemplo

En este ejemplo, tomaremos una imagen en color "OpenCV_logo.png" para dividirla en 3 canales.

import cv2 

image = cv2.imread('Images/OpenCV_logo.png')
#split the image into its three channels
(b_channel, g_channel, r_channel) = cv2.split(image)

#display the images
cv2.imshow('blue channel',b_channel) 
cv2.imshow('green channel',g_channel) 
cv2.imshow('red channel',r_channel) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

Imagen de entrada

Imágenes de salida

La imagen en color "OpenCV_logo.png" se ha dividido en tres imágenes en escala de grises: r_channel ("canal rojo"), g_channel (verde), b_channel (azul).

Fusionar canales

La función cv2.merge() toma matrices de un solo canal y las combina para crear una matriz/imagen multicanal. Devuelve un array de la concatenación de los elementos de los arrays de entrada. La siguiente es la sintaxis de la función merge():

cv2.merge(mv[, dst])

Parámetros

  • mv: vector de entrada de las matrices a fusionar. todas las matrices deben tener el mismo tamaño y la misma profundidad.

  • recuento: debe ser mayor que cero. Especifica el número de matrices de entrada cuando el vector de entrada es una matriz C simple.

  • dst: matriz de salida con el mismo tamaño y profundidad que la matriz de entrada.

Ejemplo

Fusionemos los canales azul, verde y rojo separados en una imagen BGR.

import cv2 
image = cv2.imread('Images/OpenCV_logo.png')
#split the image into its three channels
(b_channel, g_channel, r_channel) = cv2.split(image)

#display the images
cv2.imshow('blue channel',b_channel) 
cv2.imshow('green channel',g_channel) 
cv2.imshow('red channel',r_channel) 

# merge the image
image_merged = cv2.merge((b_channel,g_channel,r_channel))
cv2.imshow('merged image',image_merged) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

Imagen de entrada

Imagen de salida

Ejemplo

En este ejemplo, convertiremos una imagen a CMYK y luego dividiremos los canales.

import cv2
import numpy as np

rgb = cv2.imread('Images/Tajmahal.jpg')
rgbdash = rgb.astype(np.float)/255.

K = 1 -np.max(rgbdash, axis=2)
C = (1-rgbdash [...,2] - K)/(1-K)
M = (1-rgbdash [...,1] - K)/(1-K)
Y = (1-rgbdash [...,0] - K)/(1-K)

# Convert the input BGR image to CMYK colorspace
CMYK = (np.dstack((C,M,Y,K)) * 255).astype(np.uint8)

# Split CMYK channels
Y, M, C, K = cv2.split(CMYK)

# display the images
cv2.imshow("Cyan",C)
cv2.imshow("Magenta", M)
cv2.imshow("Yellow", Y)
cv2.imshow("Key", K)

if cv2.waitKey(0):
    cv2.destroyAllWindows()

Imagen de entrada

Imagen de salida cian

Imagen de salida Magenta

Imagen de salida amarilla

Clave de imagen de salida

En el ejemplo anterior, la imagen RGB se convirtió a CMYK y se dividió en cuatro canales: cian, magenta, amarillo y clave.

Artículos relacionados: