OpenCV(八):图像核心操作之拆分及合并图像通道

摘要:

有时候我们需要对 BGR 三个通道分别进行操作,就是需要你把BGR 拆分成单个通道 B G R,这叫做拆分;

有时候又需要把独立通道的图片合并成一个 BGR 图像,这叫做合并。

拆分代码:

import cv2

import numpy as np

img = cv2.imread("tree.jpg")

b, g, r = cv2.split(img)   # 拆分

print(b)

'''
[[219 219 219 ... 205 200 203]
 [219 219 219 ... 205 200 203]
 [219 219 219 ... 206 201 204]
 ...
 [  0   7   8 ...  12   2  14]
 [  0   0   0 ...  34  14  18]
 [ 10   0   0 ...  17   0   0]]
'''

print(r)

'''
[[  9  10  10 ...   0   0   2]
 [  9  10  12 ...   0   0   2]
 [  9  10  12 ...   0   1   3]
 ...
 [ 99  81  92 ... 164 144 152]
 [119 123 117 ... 185 142 137]
 [102 104  91 ... 138 113 122]]
'''

r = 0  # 直接对通道进行赋值(注意:这是是先拆分,再赋值)


print(r)
'''
0
'''

注意:cv.split()是一个比较耗时的操作,只有真正需要的时候才用这个方法,尽量优先使用 Numpy 索引。

合并代吗:

img = cv2.imread("tree.jpg")

b, g, r = cv2.split(img)   # 拆分

img=cv2.merge([b,g,r])     # 合并

print(img)

# # 或者
# b = img[:, :, 0]
# print(img)

'''
[[[219 123   9]
  [219 123  10]
  [219 123  10]
  ...
  [205 105   0]
  [200 102   0]
  [203 106   2]]

 [[219 123   9]
  [219 123  10]
  [219 122  12]
  ...
  [205 105   0]
  [200 102   0]
  [203 106   2]]

 [[219 123   9]
  [219 123  10]
  [219 122  12]
  ...
  [206 106   0]
  [201 103   1]
  [204 107   3]]

 ...

 [[  0 119  99]
  [  7  95  81]
  [  8 110  92]
  ...
  [ 12 177 164]
  [  2 153 144]
  [ 14 162 152]]

 [[  0 144 119]
  [  0 150 123]
  [  0 142 117]
  ...
  [ 34 192 185]
  [ 14 141 142]
  [ 18 141 137]]

 [[ 10 120 102]
  [  0 125 104]
  [  0 107  91]
  ...
  [ 17 136 138]
  [  0 107 113]
  [  0 125 122]]]
'''

注意:TypeError: merge() takes at most 2 arguments (3 given)  记得加上中括号,而不是img = cv2.merge(b, g, r),需要的是列表数据类型。

假如你想使所有像素的 红色通道值  都为0,不必拆分再赋值,可以直接使用 Numpy 索引,这会更快

img[:, :, 2] = 0

import cv2

img=cv2.imread('tree.jpg')

img[:,:,2]=0

print(img)
'''
[[[219 123   0]
  [219 123   0]
  [219 123   0]
  ...
  [205 105   0]
  [200 102   0]
  [203 106   0]]

 [[219 123   0]
  [219 123   0]
  [219 122   0]
  ...
  [205 105   0]
  [200 102   0]
  [203 106   0]]

 [[219 123   0]
  [219 123   0]
  [219 122   0]
  ...
  [206 106   0]
  [201 103   0]
  [204 107   0]]

 ...

 [[  0 119   0]
  [  7  95   0]
  [  8 110   0]
  ...
  [ 12 177   0]
  [  2 153   0]
  [ 14 162   0]]

 [[  0 144   0]
  [  0 150   0]
  [  0 142   0]
  ...
  [ 34 192   0]
  [ 14 141   0]
  [ 18 141   0]]

 [[ 10 120   0]
  [  0 125   0]
  [  0 107   0]
  ...
  [ 17 136   0]
  [  0 107   0]
  [  0 125   0]]]
'''

转载请注明转自:https://blog.csdn.net/Owen_goodman/article/details/107063971

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值