起因:
大家都知道的,在OpenCV中,圖像都是按 BGR 的 顏色通道順序 來進行處理的。在自學OpenCV的過程中,我對 拆分和合並顏色通道 起了興趣。自己寫了一些代碼來驗證自己的思路。
實驗思路:
- 分別將三個通道的矩陣數值取出;
- 保留單色通道,其他通道全部置0,以顯示 單色 圖片的效果;
- 保留雙色通道,剩餘一個通道置0,以顯示 混合雙色 圖片的效果;
- 保留全部三個顏色通道,重新編排顏色通道順序,以顯示不同 顏色通道順序 對應圖片的效果。
Demo:
原始圖像
(girl.jpg):
單色圖片
保留 blue 通道,其他通道全部置0(b_pic.jpg):
保留 green 通道,其他通道全部置0(g_pic.jpg):
保留 red 通道,其他通道全部置0(r_pic.jpg):
雙色混合圖片
green、red通道混合,其他通道全部置0(gr_pic.jpg):
blue、red通道混合,其他通道全部置0(br_pic.jpg):
blue、green通道混合,其他通道全部置0(bg_pic.jpg):
三通道全混合
存爲 RGB 通道順序的 圖片(rgb_pic.jpg):
存爲 BGR 通道順序的 圖片(bgr_pic.jpg):
附上自己寫的實驗代碼:
# -*- coding: utf-8 -*- import cv2 import numpy as np pic = cv2.imread('../pic/girl.jpg') b, g, r = cv2.split(pic) ### 單色圖片 # 保留 blue 通道,其他通道全部置0 b_pic = np.zeros((424, 600, 3), np.uint8) b_pic[:, :, 0] = b cv2.imshow('b_pic', b_pic) cv2.imwrite('../pic/b_pic.jpg', b_pic) cv2.waitKey(2000) cv2.destroyAllWindows() # 保留 green 通道,其他通道全部置0 g_pic = np.zeros((424, 600, 3), np.uint8) g_pic[:, :, 1] = g cv2.imshow('g_pic', g_pic) cv2.imwrite('../pic/g_pic.jpg', g_pic) cv2.waitKey(2000) cv2.destroyAllWindows() # 保留 red 通道,其他通道全部置0 r_pic = np.zeros((424, 600, 3), np.uint8) r_pic[:, :, 2] = r cv2.imshow('r_pic', r_pic) cv2.imwrite('../pic/r_pic.jpg', r_pic) cv2.waitKey(2000) cv2.destroyAllWindows() ### 雙色混合圖片 # green、red通道混合,其他通道全部置0 gr_pic = cv2.imread('../pic/girl.jpg') gr_pic[:, :, 0] = 0 cv2.imshow('gr_pic', gr_pic) cv2.imwrite('../pic/gr_pic.jpg', gr_pic) cv2.waitKey(2000) cv2.destroyAllWindows() # blue、red通道混合,其他通道全部置0 br_pic = cv2.imread('../pic/girl.jpg') br_pic[:, :, 1] = 0 cv2.imshow('br_pic', br_pic) cv2.imwrite('../pic/br_pic.jpg', br_pic) cv2.waitKey(2000) cv2.destroyAllWindows() # blue、green通道混合,其他通道全部置0 bg_pic = cv2.imread('../pic/girl.jpg') bg_pic[:, :, 2] = 0 cv2.imshow('bg_pic', bg_pic) cv2.imwrite('../pic/bg_pic.jpg', bg_pic) cv2.waitKey(2000) cv2.destroyAllWindows() ### 三通道全混合 # 存爲 RGB 通道順序的 圖片 rgb_pic = np.zeros((424, 600, 3), np.uint8) rgb_pic[:, :, 0] = r rgb_pic[:, :, 1] = g rgb_pic[:, :, 2] = b cv2.imshow('rgb_pic', rgb_pic) cv2.imwrite('../pic/rgb_pic.jpg', rgb_pic) cv2.waitKey(2000) cv2.destroyAllWindows() # 存爲 BGR 通道順序的 圖片 bgr_pic = np.zeros((424, 600, 3), np.uint8) bgr_pic[:, :, 0] = b bgr_pic[:, :, 1] = g bgr_pic[:, :, 2] = r cv2.imshow('bgr_pic', bgr_pic) cv2.imwrite('../pic/bgr_pic.jpg', bgr_pic) cv2.waitKey(2000) cv2.destroyAllWindows()