前段时间做过几个彩色图像多通道特征提取的研究,所以在这里记录一下彩色图像通道分离+融合的代码。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('/lena.jpg',cv2.IMREAD_COLOR)        #以彩色形式读取图像

#函数分离图像三通道
b, g, r = cv2.split(img)
cv2.imshow("Blue 1", b)
cv2.imshow("Green 1", g)
cv2.imshow("Red 1", r)
cv2.waitKey (0)  
cv2.destroyAllWindows() 

#手动分离图像三通道
b = img[:, :, 0]  # 第一个通道的值
g = img[:, :, 1]  # 第二个通道的值
r = img[:, :, 2]  # 第三个通道的值
cv2.imshow('b', b)
cv2.imshow('g', g)
cv2.imshow('r', r)
cv2.waitKey(0)
cv2.destroyAllWindows()

 图像三通道分离后,两两通道重新组合:

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('/lena.jpg',cv2.IMREAD_COLOR)        #以彩色形式读取图像

#任意两通道组合
zeros = np.zeros(img.shape[:2], dtype = "uint8")# 生成一个值为0的单通道数组
# 分别扩展B、G、R成为三通道。另外两个通道用上面的值为0的数组填充
bb = cv2.merge([b, zeros, zeros])
gg = cv2.merge([zeros, g, zeros])
rr = cv2.merge([zeros, zeros, r])
gr = cv2.merge([zeros, g, r])
br = cv2.merge([b, zeros, r])
bg = cv2.merge([b, g, zeros])

#显示图像
cv2.imshow("bb", bb)
cv2.imshow("gg", gg)
cv2.imshow("rr", rr)
cv2.imshow("gr", gr)
cv2.imshow("br", br)
cv2.imshow("bg", bg)
cv2.waitKey(0)
cv2.destroyAllWindows() 

图像三通道分离后再融合以及单通道显示:

import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('lena.jpg',cv2.IMREAD_COLOR)

# 将彩色rgb图像拆分为r,g,b
r,g,b = np.dsplit(img,3)

# 将r,g,b图像合并为彩色rgb图像
rgb_img = np.dstack((r,g,b))

plt.figure(figsize=(10,12),dpi= 80)

plt.subplot(221)
plt.imshow(r,cmap='gray')
plt.xlabel('r')
plt.subplot(222)
plt.imshow(g,cmap='gray')
plt.xlabel('g')
plt.subplot(223)
plt.imshow(b,cmap='gray')
plt.xlabel('b')
plt.subplot(224)
plt.imshow(rgb_img)
plt.xlabel('rgb')
plt.show()

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐