图像通道分离
有两种方法,一个是使用OpenCV自带的split 函数,还有一个是使用Numpy数组来分离通道.
使用OpenCV 自带 split函数
[python] view plain copy
- #!/usr/bin/env python
- # encoding: utf-8
- import cv2
- import numpy as np
- img = cv2.imread("mini.jpg")
- b,g,r = cv2.split(img)
- cv2.imshow("Blue",r)
- cv2.imshow("Red",g)
- cv2.imshow("Green",b)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
- # 也可以单独返回其中一个通道
- b = cv2.split(img)[0] # B通道
- g = cv2.split(img)[1] # G通道
- r = cv2.split(img)[2] # R通道
使用Numpy 数组分离图像通道
[python] view plain copy
- #!/usr/bin/env python
- # encoding: utf-8
- import cv2
- import numpy as np
- #使用Numpy 数组来实现图像通道分离
- img = cv2.imread("mini.jpg")
- # 创建3个跟图像一样大小的矩阵,数值全部为0
- b = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
- g = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
- r = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)
- #复制图像通道里的数据
- b[:,:] = img[:,:,0] # 复制 b 通道的数据
- g[:,:] = img[:,:,1] # 复制 g 通道的数据
- r[:,:] = img[:,:,2] # 复制 r 通道的数据
- cv2.imshow("Blue",b)
- cv2.imshow("Red",r)
- cv2.imshow("Green",g)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
通道合并
扫描二维码关注公众号,回复:
3445550 查看本文章
通道合并也有两种方法。一种是使用OpenCV自带的 merge 函数
[python] view plain copy
- merged = cv2.merge([b,g,r]) #前面分离出来的三个通道
使用Numpy 方法
[python] view plain copy
- mergedByNp = np.dstack([b,g,r])
问题: 网上看到说用Numpy 合并组合的方式与OpenCV自带的不一样,所以的结果不能在OpenCV 其它函数中使用。使用 OpenCV 自带的 merge 函数。
我的测试结果是它们的合并结果是一致的。
测试代码如下:
[python] view plain copy
- merged = cv2.merge([b,g,r])
- print "Merge by OpenCV"
- print merged.strides
- '''''
- merge by OpenCV
- (1890, 3, 1)
- '''
- mergedByNp = np.dstack([b,g,r])
- print "Merge by NumPy "
- print mergedByNp.strides
- '''''
- merge by Numpy
- (1890, 3, 1)
- '''