分别显示一副彩色图片的B,G,R通道图片
要实现这个功能,原理很简单。
一张彩图有三个颜色通道,显示哪个就将另外两个通道置0
代码
import cv2 as cv
img = cv.imread('img2.png', cv.IMREAD_REDUCED_COLOR_2)
# 定义一个函数,实现显示B通道图像
def img_B():
img_b, img_g, img_r = cv.split(img) # 拆分颜色通道 (1)
img_g[:, :] = 0 # 将G通道置0
img_r[:, :] = 0 # 将R通道置0
img_B = cv.merge([img_b, img_g, img_r]) # 按bgr合并通道s
cv.imshow('imgB', img_B) # 显示图片
return img_B
# 定义一个函数,实现显示G通道图像
def img_G():
img_b, img_g, img_r = cv.split(img) # 拆分颜色通道 (1)
img_b[:, :] = 0
img_r[:, :] = 0
img_G = cv.merge([img_b, img_g, img_r]) # 按bgr合并通道
cv.imshow('imgG', img_G) # 显示图片
return img_G
# 定义一个函数,实现显示R通道图像
def img_R():
img_b, img_g, img_r = cv.split(img) # 拆分颜色通道 (1)
img_b[:, :] = 0
img_g[:, :] = 0
img_R = cv.merge([img_b, img_g, img_r]) # 按bgr合并通道
cv.imshow('imgR', img_R) # 显示图片
return img_R
cv.imshow('img', img)
img_B = img_B()
img_G = img_G()
img_R = img_R()
cv.waitKey(0)
cv.destroyAllWindows()
# (1):若单独把这行代码放到全局中,可理解为全局变量,三个函数会共用一份数据
# 代码放在函数中变为局部变量,拆分三次原图颜色通道,数据互不干扰
效果图
2.0代码
# 分别显示一副彩色图像的B,G,R通道图像
import copy
import cv2 as cv
path = 'img.png' # 图片的路径
img = cv.imread(path, cv.IMREAD_REDUCED_COLOR_2) # 读取图片并将其缩小为原来的1/2
# 调用python中的深拷贝函数,复制三份图片
img_b = copy.deepcopy(img)
img_g = copy.deepcopy(img)
img_r = copy.deepcopy(img)
# 将img_b的g,r通道置0,得到b通道图片
img_b[:, :, 1] = 0
img_b[:, :, 2] = 0
# 将img_g的b,r通道置0,得到g通道图片
img_g[:, :, 0] = 0
img_g[:, :, 2] = 0
# 定义成函数,将img_r的b,g通道置0,得到r通道图片
def R(img_r):
img_r[:, :, 0] = 0
img_r[:, :, 1] = 0
return img_r
# 显示图片
cv.imshow('img', img)
cv.imshow('B', img_b)
cv.imshow('G', img_g)
cv.imshow('R', R(img_r))
cv.waitKey(0) # 等待按键输入,返回按键的ASCII值。0表示任意按键;其他整数表示时间,单位毫秒
cv.destroyAllWindows() # 销毁所有窗口
效果图