Opencv | 您所在的位置:网站首页 › ps什么用于分离图像的一个或多个部分 › Opencv |
之前分享了有关颜色空间(色彩空间)的总结,最初的想法是想把RGB图像的三个通道拆分开来,结果拆分过程比较曲折,所以写一篇博客记录下来,仅供参考。 首先,我们可以利用opencv中的两个函数来拆分通道(cv2.split)和合并通道(cv2.merge),代码如下: import cv2 img = cv2.imread('test.jpg') #opencv读取图像文件 b, g ,r =cv2.split(img) #顺序是b,g,r,不是r,g,b merged = cv2.merge([b,g,r]) cv2.imshow('image',img) cv2.imshow("Blue 1", b) cv2.imshow("Green 1", g) cv2.imshow("Red 1", r) cv2.imshow("merged 1", merged) cv2.waitKey(0) #一定要加cv2.waitKey(0),要不然会报错运行结果实际上会得到五个图片窗口,这个只放上三通道和R通道的图: 我们将RGB图像三通道拆分的过程实际上是先拆分出来,再形成了R/G/B的单通道的图像,而单通道图像就是灰度图(说起来有些绕,其实比较好理解)。如果想把它变成红色/绿色/蓝色的通道图,可以做通道合并(但其他通道分量为零),例如:我想得到红色通道图,代码如下: import cv2 import numpy as np img = cv2.imread('test.jpg') b, g ,r =cv2.split(img) zeros = np.zeros(img.shape[:2], dtype = "uint8") merged_r = cv2.merge([zeros,zeros,r]) #通道分量为零可以理解为零矩阵 cv2.imshow('image',img) cv2.imshow("Red 1", r) cv2.imshow("merged_r",merged_r) cv2.waitKey(0)RGB的红色通道拆分和合并结果如下图: 很多人可能像小编一样用的是jupyter notebook,觉得每次opencv显示窗口图像很麻烦,所以想用matplotlib来解决这一问题。但是在使用opencv和matplotlib的过程中会遇到图像反色或者生成的是伪彩色图像的问题,原因是两个读取RGB通道的顺序是不一样的,opencv的顺序是B-G-R,而matplotlib的顺序是R-G-B,所以这个区分就会产生一些矛盾。话不多说,直接放上代码供大家参考: import cv2 import matplotlib.pyplot as plt img = cv2.imread('test.jpg') b,g,r = cv2.split(img) image= cv2.merge([r,g,b]) image_merged = cv2.merge([r,g,b]) plt.figure(figsize=(10,5)) plt.subplot(2,3,1), plt.title('image') plt.imshow(image), plt.axis('off') plt.subplot(2,3,2), plt.title('image_gray') plt.imshow(image_gray,cmap='gray'), plt.axis('off') plt.subplot(2,3,3), plt.title('image_merged') plt.imshow(image_merged), plt.axis('off') plt.subplot(2,3,4), plt.title('r') plt.imshow(r,cmap='gray'), plt.axis('off') plt.subplot(2,3,5), plt.title('g') plt.imshow(g,cmap='gray'), plt.axis('off') plt.subplot(2,3,6), plt.title('b') plt.imshow(b,cmap='gray'), plt.axis('off') plt.show()plt.show()的图像结果如下: |
CopyRight 2018-2019 实验室设备网 版权所有 |