OpenCV例程(三)

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篇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值