Python笔记——python OpenCV 图像通道分离和合并

图像通道分离

有两种方法,一个是使用OpenCV自带的split 函数,还有一个是使用Numpy数组来分离通道.


使用OpenCV 自带 split函数

[python]  view plain  copy
  1. #!/usr/bin/env python    
  2. # encoding: utf-8    
  3.   
  4. import cv2    
  5. import numpy as np    
  6.   
  7. img = cv2.imread("mini.jpg")  
  8. b,g,r = cv2.split(img)  
  9. cv2.imshow("Blue",r)  
  10. cv2.imshow("Red",g)  
  11. cv2.imshow("Green",b)  
  12. cv2.waitKey(0)  
  13. cv2.destroyAllWindows()  
  14.   
  15. # 也可以单独返回其中一个通道  
  16. b = cv2.split(img)[0]  # B通道  
  17. g = cv2.split(img)[1]  # G通道  
  18. r = cv2.split(img)[2]  # R通道  

使用Numpy 数组分离图像通道

[python]  view plain  copy
  1. #!/usr/bin/env python    
  2. # encoding: utf-8    
  3.   
  4. import cv2    
  5. import numpy as np    
  6.   
  7. #使用Numpy 数组来实现图像通道分离  
  8. img = cv2.imread("mini.jpg")  
  9. # 创建3个跟图像一样大小的矩阵,数值全部为0  
  10. b = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)  
  11. g = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)  
  12. r = np.zeros((img.shape[0],img.shape[1]),dtype=img.dtype)  
  13.   
  14. #复制图像通道里的数据  
  15. b[:,:] = img[:,:,0]  # 复制 b 通道的数据  
  16. g[:,:] = img[:,:,1]  # 复制 g 通道的数据  
  17. r[:,:] = img[:,:,2]  # 复制 r 通道的数据  
  18.   
  19. cv2.imshow("Blue",b)  
  20. cv2.imshow("Red",r)  
  21. cv2.imshow("Green",g)  
  22. cv2.waitKey(0)  
  23. cv2.destroyAllWindows()  

通道合并

通道合并也有两种方法。一种是使用OpenCV自带的 merge 函数

[python]  view plain  copy
  1. merged = cv2.merge([b,g,r]) #前面分离出来的三个通道   

使用Numpy 方法

[python]  view plain  copy
  1. mergedByNp = np.dstack([b,g,r])   


问题: 网上看到说用Numpy 合并组合的方式与OpenCV自带的不一样,所以的结果不能在OpenCV 其它函数中使用。使用 OpenCV 自带的 merge 函数。

我的测试结果是它们的合并结果是一致的。

测试代码如下:

[python]  view plain  copy
  1. merged = cv2.merge([b,g,r])    
  2. print "Merge by OpenCV"     
  3. print merged.strides   
  4.   
  5. ''''' 
  6. merge by OpenCV 
  7. (1890, 3, 1) 
  8. '''  
  9.   
  10. mergedByNp = np.dstack([b,g,r])     
  11. print "Merge by NumPy "     
  12. print mergedByNp.strides    
  13.   
  14. ''''' 
  15. merge by Numpy 
  16. (1890, 3, 1) 
  17. '''  

你可能感兴趣的:(Python)