一、拆分颜色通道
1、通过数组索引拆分通道
前提需知
OpenCV中BGR图像是一个三维数组,从0开始,第0层是B(蓝),第1层是G(绿),第2层是R(红)
测试代码
import cv2
# 读图像,将尺寸减小为原来的1/2
img=cv2.imread('img.png',cv2.IMREAD_REDUCED_COLOR_2)
cv2.imshow('img',img) # 显示原图
b=img[:,:,0] # 调用img图像的b通道
g=img[:,:,1]
r=img[:,:,2]
cv2.imshow('img_B',b) # 显示b通道图片
cv2.imshow('img_G',g)
cv2.imshow('img_R',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果
2、使用cv2.split()函数拆分通道
相关代码
b,g,r=cv2.split(img)
参数说明
img:要拆分颜色通道的图片
返回值:按BGR顺序返回通道
测试代码
import cv2
img=cv2.imread('img.png',cv2.IMREAD_REDUCED_COLOR_2) # 读图像,尺寸减小为1/2
cv2.imshow('Rem',img)
b,g,r=cv2.split(img) # 按通道拆分图像
cv2.imshow('Rem_B',b)
cv2.imshow('Rem_G',g)
cv2.imshow('Rem_R',r)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 效率不如数组索引
运行结果
总结
cv2.split()函数拆分通道效率不如数组索引,所以在处理较大图像时优先考虑数组索引
二、合并颜色通道
相关代码
cv2.merge([b,g,r]
参数说明
b,g,r是三个单通道图像,依次将它们作为B,G,R通道的图像合并
测试代码
# cv2.merge()函数可将3通道图像合并
import cv2
img=cv2.imread('img.png',cv2.IMREAD_REDUCED_COLOR_2) # 读图像,尺寸减小为1/2
cv2.imshow('Rem',img)
b=img[:,:,0]
g=img[:,:,1]
r=img[:,:,2]
# 按不同顺序合并图像
bgr=cv2.merge([b,g,r])
rgb=cv2.merge([r,g,b])
# 显示合并的图像
cv2.imshow('Rem_bgr',bgr)
cv2.imshow('Rem_rgb',rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果
OpenCV学习笔记,'杜苏芮'要来了
2023/07/27/7:47