OpenCV图像的按位逻辑运算

1.基本介绍

逻辑运算是一种非常重要的运算方式,图像处理过程中经常要按照位进行逻辑运算,OpenCV中常见的按位逻辑运算函数如下表:

函数名基本含义
cv2.bitwise_and()按位与
cv2.bitwise_or()按位或
cv2.bitwise_xor()按位异或
cv2.bitwise_not()按位取反

2.按位与运算

在与运算中,当参与与运算的两个逻辑值均为真时,结果才为真。其逻辑关系可以类比如下的串联电路,只有当两个开关都闭合时,灯才会亮。

运算规则:0&0=0;0&1=0;1&0=0;1&1=1;在这里插入图片描述
在 OpenCV 中,可以使用 cv2.bitwise_and()函数来实现按位与运算,其语法格式为:

dst = cv2.bitwise_and( src1, src2[, mask]] )
参数解析:
dst 表示与输入值具有同样大小的 array 输出值
src1,src2表示第一和第二个 array 或 scalar 类型的输入值
mask 表示可选操作掩码,8 位单通道 array

按位与操作的特点
任何数值 N 与数值 0 进行按位与操作,都会得到数值 0

任何数值 N(仅考虑 8 位值)与数值 255(8 位二进制数是 1111 1111)进行按位与操作,都会得到数值 N 本身。

可以通过生成一张灰度图进行测试

2.1数组演示按位与运算

import cv2
import numpy as np
a=np.random.randint(0,255,(8,8),dtype=np.uint8)
b=np.zeros((8,8),dtype=np.uint8)
b[0:4,0:4]=255
b[5:,5:]=255
c=cv2.bitwise_and(a,b)
print("a=\n",a)
print("b=\n",b)
print("c=\n",c)

程序输出结果

a=
 [[ 10 155  57 153 235 118  30 221]
 [127  36   6  40 211 236  30  71]
 [123 240 192  40 112  96 147 252]
 [127 172  60 150  89 207 136  40]
 [171  67  58 248  30  15 216  41]
 [248 120  58 231 127 210 164 198]
 [111 189 206  40 198  59 247 177]
 [  1 173 242 201 153  72  86 207]]
b=
 [[255 255 255 255   0   0   0   0]
 [255 255 255 255   0   0   0   0]
 [255 255 255 255   0   0   0   0]
 [255 255 255 255   0   0   0   0]
 [  0   0   0   0   0   0   0   0]
 [  0   0   0   0   0 255 255 255]
 [  0   0   0   0   0 255 255 255]
 [  0   0   0   0   0 255 255 255]]
c=
 [[ 10 155  57 153   0   0   0   0]
 [127  36   6  40   0   0   0   0]
 [123 240 192  40   0   0   0   0]
 [127 172  60 150   0   0   0   0]
 [  0   0   0   0   0   0   0   0]
 [  0   0   0   0   0 210 164 198]
 [  0   0   0   0   0  59 247 177]
 [  0   0   0   0   0  72  86 207]]

从输出结果可以看出,数组c是数组a与b的按位与操作的结果。对于数组c内的值,与数组b中数值255对应位置上的值来源于数组a;与数组b中数值0对应位置上的值为0

2.2 掩膜图像演示按位与运算

import cv2
import numpy as np
a=cv2.imread("lena_color.jpg")
b=np.zeros(a.shape,dtype=np.uint8)
b[100:400,200:400]=255
b[100:500,100:200]=255
c=cv2.bitwise_and(a,b)
cv2.imshow("lena彩色原图",a)
cv2.imshow("掩膜图像",b)
cv2.imshow("按位与运算结果图像",c)
cv2.waitKey()
cv2.destroyAllWindows()

程序输出结果
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
从运行结果来看,我们构造一个掩模图像,保留图像 lena 的头部。

3.按位或运算

按位或运算的规则是,当参与或运算的两个逻辑值中有一个为真时,结果就为真。其逻辑关系可以类比为如如下的并联电路,两个开关中只要有任意一个闭合时,灯就会亮。
运算规则:1|1=11|0=10|1=10|0=0;在这里插入图片描述
在 OpenCV 中,可以使用 cv2.bitwise_or()函数来实现按位或运算,其语法格式为:dst =cv2.bitwise_or( src1, src2[, mask]] )
参数解析:
dst 表示与输入值具有同样大小的 array 输出值
src1,src2表示第一和第二个 array 或 scalar 类型的输入值
mask 表示可选操作掩码,8 位单通道 array

4.按位非运算

按位非运算是取反操作,满足如下逻辑:当运算数为真时,结果为假;当运算数为假时,结果为真。

运算规则:~1=0; ~0=1;

在 OpenCV 中,可以使用 cv2.bitwise_not()函数来实现按位或运算,其语法格式为:dst =cv2.bitwise_not( src1, src2[, mask]] )
参数解析:
dst 表示与输入值具有同样大小的 array 输出值
src1,src2表示第一和第二个 array 或 scalar 类型的输入值
mask 表示可选操作掩码,8 位单通道 array

5.按位异或运算

异或运算也叫半加运算,其运算法则与不带进位的二进制加法类似。
运算规则:0^ 0=0; 0^ 1=1; 1^ 0=1; 1^1=0;
在 OpenCV 中,可以使用 cv2.bitwise_xor()函数来实现按位或运算,其语法格式为:dst =cv2.bitwise_xor( src1, src2[, mask]] )
参数解析:
dst 表示与输入值具有同样大小的 array 输出值
src1,src2表示第一和第二个 array 或 scalar 类型的输入值
mask 表示可选操作掩码,8 位单通道 array

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值