python OpenCV 图像通道分离和合并 (四)

 图像通道分离

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


使用OpenCV 自带 split函数

#!/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 数组分离图像通道

#!/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 函数

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

使用Numpy 方法

mergedByNp = np.dstack([b,g,r]) 


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

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

测试代码如下:

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)
'''

















  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值