您的位置:首页 > 编程语言 > Python开发

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

2018-01-11 21:10 851 查看
图像通道分离

有两种方法,一个是使用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()  

通道合并

通道合并也有两种方法。一种是使用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) 

'''  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐