使用OpenCV Python拆分和合並通道


標準的數字彩色影像由畫素表示,每個畫素是原色的組合。而通道是由彩色影像的其中一種原色組成的灰度影像。例如,RGB影像有三個通道:紅色、綠色和藍色。

觀察下面的彩色影像,看看每個通道單獨是什麼樣子。

下面的灰度影像是RGB影像每個通道的表示。

在本文中,我們將討論如何使用python openCV庫拆分和合並影像的通道。

拆分通道

Python OpenCV模組提供了一個函式cv2.split()來將多通道/彩色陣列拆分成單獨的單通道陣列。它將返回一個包含三個通道的陣列,每個通道對應藍色、綠色和紅色通道,表示為具有二維的ndarray。

語法

cv2.split(m[, mv])

其中:

  • src – 輸入多通道陣列。

  • mv – 輸出陣列或陣列向量

示例

在這個例子中,我們將使用一個彩色影像“OpenCV_logo.png”將其拆分成3個通道。

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()

輸入影像

輸出影像

彩色影像“OpenCV_logo.png”已被拆分成三個灰度影像:r_channel(“紅色通道”)、g_channel(綠色)、b_channel(藍色)。

合併通道

cv2.merge()函式接收單通道陣列並將它們組合成多通道陣列/影像。返回輸入陣列元素連線的陣列。以下是merge()函式的語法:

cv2.merge(mv[, dst])

引數

  • mv:要合併的矩陣的輸入向量。所有矩陣都必須具有相同的大小和相同的深度。

  • count:必須大於零。當輸入向量是普通的C陣列時,指定輸入矩陣的數量。

  • dst:與輸入陣列大小和深度相同的輸出陣列。

示例

讓我們將單獨的藍色、綠色和紅色通道合併成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()

輸入影像

輸出影像

示例

在這個例子中,我們將把影像轉換為CMYK,然後拆分通道。

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()

輸入影像

輸出影像 青色

輸出影像 品紅

輸出影像 黃色

輸出影像 黑色

在上面的例子中,RGB影像被轉換為CMYK並拆分成四個通道:青色、品紅、黃色和黑色。

更新於:2023年5月30日

4K+ 瀏覽量

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.