色彩通道的拆分与合并
本节以彩色图像的RGB色彩空间为例。
在OpenCV中,RGB色彩通道的顺序为B、G、R
通道拆分
索引
彩色图像是一个三维数组,第三维索引就是通道索引。0代表B、1代表G、2代表R
import cv2
import numpy as np
# 导入图像
image = cv2.imread("./monalisa.png")
# 建立窗口
cv2.namedWindow("b", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("g", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("r", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
# 通道拆分
b = image[:, :, 0]
g = image[:, :, 1]
r = image[:, :, 2]
# 显示图像
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
key = chr(cv2.waitKey())
if key == "1":
print("图像显示结束")
cv2.destroyAllWindows()
通过通道拆分,我们可以得到B,G,R通道的灰度图像。
我们也可以更直观地体会B,G,R通道:
import cv2
import numpy as np
# 导入图像
image = cv2.imread("./monalisa.png")
# 建立窗口
cv2.namedWindow("b", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("g", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("r", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
# 通道拆分
b = image.copy()
b[:, :, [1, 2]] = 0
g = image.copy()
g[:, :, [0, 2]] = 0
r = image.copy()
r[:, :, [0, 1]] = 0
# 显示图像
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
key = chr(cv2.waitKey())
if key == "1":
print("图像显示结束")
cv2.destroyAllWindows()
split 函数
b,g,r=cv2.split(image)
直接返回B,G,R通道的灰度图像
import cv2
import numpy as np
# 导入图像
image = cv2.imread("./monalisa.png")
# 建立窗口
cv2.namedWindow("b", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("g", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("r", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
# 通道拆分
b,g,r=cv2.split(image)
# 显示图像
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)
key = chr(cv2.waitKey())
if key == "1":
print("图像显示结束")
cv2.destroyAllWindows()
通道合并
merge函数
cv2.merge([B,G,R])
按照 B → G → R B\rightarrow G\rightarrow R B→G→R 的顺序,将三幅灰度图像合并为一副RGB彩色图像。
import cv2
import numpy as np
# 导入图像
image = cv2.imread("./monalisa.png")
# 建立窗口
cv2.namedWindow("rgb", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("gbr", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("brg", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("rbg", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("grb", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
cv2.namedWindow("bgr", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
# 通道拆分
b,g,r=cv2.split(image)
# 通道合并
rgb=cv2.merge([r,g,b])
gbr=cv2.merge([g,b,r])
brg=cv2.merge([b,r,g])
rbg=cv2.merge([r,b,g])
grb=cv2.merge([g,r,b])
bgr=cv2.merge([b,g,r])
# 显示图像
cv2.imshow("rgb", rgb)
cv2.imshow("gbr", gbr)
cv2.imshow("brg", brg)
cv2.imshow("rbg", rbg)
cv2.imshow("grb", grb)
cv2.imshow("bgr", bgr)
key = chr(cv2.waitKey())
if key == "1":
print("图像显示结束")
cv2.destroyAllWindows()