3、按位逻辑运算
逻辑运算是一种非常重要的运算方式,本节主要介绍penCV中的按位逻辑运算,简称位运算。
常见的位运算如下表所示。
函数名 | 基本含义 |
---|---|
cv2.bitwise-_and() | 按位与 |
cv2.bitwise-_or() | 按位或 |
cv2.bitwise-_xor() | 按位异或 |
cv2.bitwise-_not() | 按位取反 |
3.1 按位与运算
类比电路,与运算即:两个逻辑值都是真时,结果才为真。
对不同情况下的与运算进行说明,表中使用"and"表示与运算。
算子1 | 算子2 | 结果 | 规则 |
---|---|---|---|
0 | 0 | 0 | and(0,0)=0 |
0 | 1 | 0 | and(0,1)=0 |
1 | 0 | 0 | and(1,0)=0 |
1 | 1 | 1 | and(1,1)=1 |
按位与运算是将数值转换成二进制值之后,在对应的位置上进行与运算。同样用表格说明。
数值 | 十进制值 | 二进制值 |
---|---|---|
数值1 | 198 | 1100 0110 |
数值2 | 219 | 1101 1011 |
按位与结果 | 194 | 1100 0010 |
在OpenCV中,用cv2.bitwise_and()函数实现按位与运算,其语法格式为:
dst = cv2.bitwise_and(src1,src2[,mask])
# dst表示与输入值具有同样大小的array输出值。
# src1表示第一个array或scalar类型的输出值。
# src2表示第二个array或scalar类型的输出值。
# mask表示可选操作掩码,8位单通道array.
特点:
(1)将任何数值N与数值0进行按位与操作,都会得到数值0
(2)将任何数值N(这里只考虑8位值)与数值255(1111 1111)进行按位与操作,都会得到数值N本身
3.2 按位或运算
类比电路,或运算即:两个逻辑值只要有一个为真时,结果就为真。
对不同情况下的或运算进行说明,表中使用"or"表示与运算。
算子1 | 算子2 | 结果 | 规则 |
---|---|---|---|
0 | 0 | 0 | or(0,0)=0 |
0 | 1 | 0 | or(0,1)=1 |
1 | 0 | 0 | or(1,0)=1 |
1 | 1 | 1 | or(1,1)=1 |
按位或运算是将数值转换成二进制值之后,在对应的位置上进行或运算。同样用表格说明。
数值 | 十进制值 | 二进制值 |
---|---|---|
数值1 | 198 | 1100 0110 |
数值2 | 219 | 1101 1011 |
按位与结果 | 223 | 1101 1111 |
在OpenCV中,用cv2.bitwise_or()函数实现按位或运算,其语法格式为:
dst = cv2.bitwise_or(src1,src2[,mask])
# dst表示与输入值具有同样大小的array输出值。
# src1表示第一个array或scalar类型的输出值。
# src2表示第二个array或scalar类型的输出值。
# mask表示可选操作掩码,8位单通道array.
3.3 按位非运算
非运算是取反操作,即:
当运算数为真时,结果为假;当运算数为假时,结果为真。
对不同情况下的非运算进行说明,表中使用"not"表示非运算。
算子 | 结果 | 规则 |
---|---|---|
0 | 1 | not(0)=1 |
1 | 0 | not(1)=0 |
按位非运算是将数值转换成二进制值之后,在对应的位置上进行非运算。同样用表格说明。
说明 | 十进制值 | 二进制值 |
---|---|---|
原始数值 | 198 | 1100 0110 |
按位非运算结果 | 57 | 0011 1001 |
在OpenCV中,用cv2.bitwise_not()函数实现按位非运算,其语法格式为:
dst = cv2.bitwise_not(src[,mask])
# dst表示与输入值具有同样大小的array输出值。
# src表示array类型的输出值。
# mask表示可选操作掩码,8位单通道array.
3.4 按位异或运算
异或运算也叫半加运算,其运算法则与不带进位的二进制加法类似。
对不同情况下的异或运算进行说明,其中“xor”表示异或运算。
算子1 | 算子2 | 结果 | 规则 |
---|---|---|---|
0 | 0 | 0 | xor(0,0)=0 |
0 | 1 | 0 | xor(0,1)=1 |
1 | 0 | 0 | xor(1,0)=1 |
1 | 1 | 1 | xor(1,1)=0 |
在OpenCV中,用cv2.bitwise_xor()函数实现按位非运算,其语法格式为:
dst = cv2.bitwise_xor(src1,src2[,mask])
# dst表示与输入值具有同样大小的array输出值。
# src1表示第一个array或scalar类型的输出值。
# src2表示第二个array或scalar类型的输出值。
# mask表示可选操作掩码,8位单通道array.