通道拆分及合并
拆分
色彩空间是 RGB 色彩空间、通道顺序是 BGR(蓝色、绿色、红色)。有时我们需要对 BGR 三个通道分别进行操作。这时你就需要把 BGR 拆分成单个通道,类似于一个红,绿,蓝分别有一个幕布,将其他颜色滤掉。有时你需要把独立通道的图片合并成一个 BGR 图像。
需要用到函数:split拆分
还是载入一个图片:
img = cv2.imread("2.png")
通过split函数拆分为单个通道:
b,g,r = cv2.split(img)
将拆分的颜色进行显示:
cv2.imshow("Blue", b)
cv2.imshow("Red", r)
cv2.imshow("Green", g)
图像载入其实是一个矩阵形式的,如果处理的东西较多,使用split函数就会让运行慢很多,此时可以采用矩阵的方式将RGB拆分出来。
代码如下:
import cv2
import numpy as np
img = cv2.imread("2.png")
b = img[:,:,0]
g = img[:,:,1]
r = img[:,:,2]
cv2.imshow("Blue", b)
cv2.imshow("Red", r)
cv2.imshow("Green", g)
cv2.waitKey(0)
拆分效果
合并
合成的时候一定要注意顺序,不然就会出现问题,我们通过下列代码实现:
img2 = cv2.merge([b,g,r])
再输出合并后的图像:
cv2.imshow("together",img2)
合并效果
但是如果顺序放错就会出现以下合并的现象:
获取图像属性
通过以下命令来获取图像的,像素数目,数据类型,宽和高
print(img.shape)#获取图像的宽、高
print(img.size)#获取图像像素数目
print(img.dtype)#返回数据类型
感兴趣区域(roi)
使用命令圈出感兴趣区域:
roi = img[100:300,100:300]
再将感兴趣区域显示出来:
cv2.imshow('roi',roi)
完整代码:
import cv2
import numpy as np
img = cv2.imread("2.png")
b,g,r = cv2.split(img)#拆分
roi = img[100:300,100:300]#感兴趣区域
img2 = cv2.merge([b,g,r])#合并
cv2.imshow('roi',roi)
cv2.imshow("img",img)
cv2.imshow("Blue", b)
cv2.imshow("Red", r)
cv2.imshow("Green", g)
cv2.imshow("together",img2)
print(img.shape)#宽、高
print(img.size)#像素数目
print(img.dtype)#数据类型
cv2.waitKey(0)