10. 图像的拼接(np.hstack)
11. 图像通道的拆分(cv2.split)
12. 图像通道的合并(cv2.merge)
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 10
img0 = cv2.imread('0.jpg', flags=1)
img1 = cv2.imread('1.jpg', flags=1)
img3 = cv2.resize(img0, (200, 300))
img4 = cv2.resize(img1, (200, 350))
img5 = cv2.resize(img1, (300, 300))
img_H = np.hstack((img3, img5)) # 水平拼接,要求高度相同,如果不相同resize为相同
img_V = np.vstack((img3, img4)) # 垂直拼接,要求宽度相同,如果不相同resize为相同
cv2.imshow('H', img_H)
cv2.imshow('V', img_V)
cv2.waitKey()
# 11
img = cv2.imread('test.jpg', flags=1)
cv2.imshow('img', img)
b, g, r = cv2.split(img) # 拆分为B G R三个独立的通道
cv2.imshow('r', r) # 显示红色分量,为灰色
# 将单通道扩增为三通道
imgZeros = np.zeros_like(img)
imgZeros[:, :, 2] = r # 在黑色图像模板中添加红色分量
cv2.imshow('channel R', imgZeros)
cv2.waitKey()
cv2.destroyAllWindows()
# 使用 NumPy 切片更简单,运行速度也比 cv2.split 快
img6 = cv2.imread('test.jpg', flags=1)
# 获取B通道
imgB = img6.copy()
imgB[:, :, 1] = 0
imgB[:, :, 2] = 0
# 获取G通道
imgG = img6.copy()
imgG[:, :, 0] = 0
imgG[:, :, 2] = 0
# 获取R通道
imgR = img6.copy()
imgR[:, :, 0] = 0
imgR[:, :, 1] = 0
plt.subplot(131)
plt.title('B')
plt.axis()
imgB = cv2.cvtColor(imgB, cv2.COLOR_BGR2RGB)
plt.imshow(imgB)
plt.subplot(132)
plt.title('G')
plt.axis()
imgG = cv2.cvtColor(imgG, cv2.COLOR_BGR2RGB)
plt.imshow(imgG)
plt.subplot(133)
plt.title('R')
plt.axis()
imgR = cv2.cvtColor(imgR, cv2.COLOR_BGR2RGB)
plt.imshow(imgR)
plt.show()
# 12
img7 = cv2.imread('test.jpg', flags=1)
b, g, r = cv2.split(img7)
img8 = cv2.merge([b, g, r])
cv2.imshow('img8', img8)
# 使用np合并通道
img9 = np.stack((b, g, r), axis=2)
print("imgMerge is imgStack?", np.array_equal(img8, img9))
cv2.imshow('img9', img9)
cv2.waitKey()
cv2.destroyAllWindows()
参考自:youcans@qq.com, youcans的OpenCV 例程200篇