如何通过OpenCV实现按位运算的实例分析?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1296个文字,预计阅读时间需要6分钟。
文章介绍+OpenCV 库中包含了许多运算函数,以下重点介绍按位运算的基本原理和示例说明。本文主要涉及以下函数:
- 按位与:bitwise_and()- 按位或:bitwise_or()- 按位异或:bitwise_xor()
按位运算的基本原理:
按位运算是对两个数的二进制位进行逐位比较和操作。以下以整数 13 和 15 为例进行说明:
二进制表示:
13: 0000 1101
15: 0000 1111
1. 按位与 (bitwise_and()):
比较对应位的值,相同则为 1,不同则为 0。结果:0000 1101十进制表示:132. 按位或 (bitwise_or()):比较对应位的值,至少一个为 1 则为 1,都为 0 则为 0。结果:0000 1111十进制表示:15
3. 按位异或 (bitwise_xor()):比较对应位的值,相同则为 0,不同则为 1。结果:0000 0010十进制表示:2
文章介绍
OpenCV 库中包含很多运算函数,这里着重介绍按位运算的基本原理并举例说明。
本篇文章中主要涉及到的函数有:
- 按位与:bitwise_and();
- 按位或:bitwise_or();
- 按位异或:bitwise_xor()。
- 按位反转:bitwise_not();
以上所有运算皆基于二进制而来。
举例说明
1、bitwise_and()
a = np.array([[1], [9], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_and(a, b) print(c)
[[1]
[8]
[0]
[0]
[0]]
这里的 1&1=1,1&0=0,0&0=0 还好理解,但是 8&9=8 是怎么回事嘞?
在介绍中我们说,按位运算都是基于二进制来的,我们可以使用 bin() 函数来将数字转换为二进制形式,如 9 的二进制形式为 1001,8 的二进制形式为 1000。
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a & b)) print(a & b)
0b1001
0b1000
0b1000
8
由此可见,按位与操作分成三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 & (and) 操作,即 1&1=1;1&0=0;0&0=0。
3、将 and 操作后的二进制转换回十进制并输出。
2、bitwise_or()
与按位与操作相似,按位或操作也分为三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 | (or) 操作,即 1|1=1;1|0=1;0|0=0。
3、将 or 操作后的二进制转换回十进制并输出。
a = np.array([[1], [9], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_and(a, b) print(c)
[[1]
[9]
[1]
[0]
[0]]
这里的 9 是因为:
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a | b)) print(a | b)
0b1001
0b1000
0b1001
9
3、bitwise_xor()
同样地,按位异或操作也是分为三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 ^ (xor) 操作,即 1^1=0;1^0=1;0^0=0。
3、将 xor 操作后的二进制转换回十进制并输出。
a = np.array([[1], [10], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_xor(a, b) print(c)
[[0]
[2]
[1]
[0]
[0]]
这里的 2 是因为:
a = 10 b = 8 print(bin(a)) print(bin(b)) print(bin(a^b)) print(a^b)
0b1010
0b1000
0b10
2
4、bitwise_not()
a = np.array([[9], [4], [1], [0], [0]]) b = cv2.bitwise_not(a) print(b) print(a+b)
[[-10]
[ -5]
[ -2]
[ -1]
[ -1]]
[[-1]
[-1]
[-1]
[-1]
[-1]]
由此可见按位反转前后的数组相加为 -1。
掩码操作
按位与操作和掩码操作通常一起使用:
a = np.array([[1], [10], [1], [0], [5]]) mask = np.array([[0], [1], [0], [1], [0]], dtype='uint8') c = cv2.bitwise_and(a, a) c_mask = cv2.bitwise_and(a, a, mask=mask) print(c) print(c_mask)
[[ 1]
[10]
[ 1]
[ 0]
[ 5]]
[[ 0]
[10]
[ 0]
[ 0]
[ 0]]
经过掩码操作,mask 置零的位置在 a 中也会被置零,mask 置一的位置在 a 中保持不变。
到此这篇关于OpenCV 之按位运算举例解析的文章就介绍到这了,更多相关OpenCV 按位运算内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!
本文共计1296个文字,预计阅读时间需要6分钟。
文章介绍+OpenCV 库中包含了许多运算函数,以下重点介绍按位运算的基本原理和示例说明。本文主要涉及以下函数:
- 按位与:bitwise_and()- 按位或:bitwise_or()- 按位异或:bitwise_xor()
按位运算的基本原理:
按位运算是对两个数的二进制位进行逐位比较和操作。以下以整数 13 和 15 为例进行说明:
二进制表示:
13: 0000 1101
15: 0000 1111
1. 按位与 (bitwise_and()):
比较对应位的值,相同则为 1,不同则为 0。结果:0000 1101十进制表示:132. 按位或 (bitwise_or()):比较对应位的值,至少一个为 1 则为 1,都为 0 则为 0。结果:0000 1111十进制表示:15
3. 按位异或 (bitwise_xor()):比较对应位的值,相同则为 0,不同则为 1。结果:0000 0010十进制表示:2
文章介绍
OpenCV 库中包含很多运算函数,这里着重介绍按位运算的基本原理并举例说明。
本篇文章中主要涉及到的函数有:
- 按位与:bitwise_and();
- 按位或:bitwise_or();
- 按位异或:bitwise_xor()。
- 按位反转:bitwise_not();
以上所有运算皆基于二进制而来。
举例说明
1、bitwise_and()
a = np.array([[1], [9], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_and(a, b) print(c)
[[1]
[8]
[0]
[0]
[0]]
这里的 1&1=1,1&0=0,0&0=0 还好理解,但是 8&9=8 是怎么回事嘞?
在介绍中我们说,按位运算都是基于二进制来的,我们可以使用 bin() 函数来将数字转换为二进制形式,如 9 的二进制形式为 1001,8 的二进制形式为 1000。
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a & b)) print(a & b)
0b1001
0b1000
0b1000
8
由此可见,按位与操作分成三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 & (and) 操作,即 1&1=1;1&0=0;0&0=0。
3、将 and 操作后的二进制转换回十进制并输出。
2、bitwise_or()
与按位与操作相似,按位或操作也分为三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 | (or) 操作,即 1|1=1;1|0=1;0|0=0。
3、将 or 操作后的二进制转换回十进制并输出。
a = np.array([[1], [9], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_and(a, b) print(c)
[[1]
[9]
[1]
[0]
[0]]
这里的 9 是因为:
a = 9 b = 8 print(bin(a)) print(bin(b)) print(bin(a | b)) print(a | b)
0b1001
0b1000
0b1001
9
3、bitwise_xor()
同样地,按位异或操作也是分为三步:
1、将数字转换成二进制形式;
2、对同一位上的数字(0 或 1)进行 ^ (xor) 操作,即 1^1=0;1^0=1;0^0=0。
3、将 xor 操作后的二进制转换回十进制并输出。
a = np.array([[1], [10], [1], [0], [0]]) b = np.array([[1], [8], [0], [0], [0]]) c = cv2.bitwise_xor(a, b) print(c)
[[0]
[2]
[1]
[0]
[0]]
这里的 2 是因为:
a = 10 b = 8 print(bin(a)) print(bin(b)) print(bin(a^b)) print(a^b)
0b1010
0b1000
0b10
2
4、bitwise_not()
a = np.array([[9], [4], [1], [0], [0]]) b = cv2.bitwise_not(a) print(b) print(a+b)
[[-10]
[ -5]
[ -2]
[ -1]
[ -1]]
[[-1]
[-1]
[-1]
[-1]
[-1]]
由此可见按位反转前后的数组相加为 -1。
掩码操作
按位与操作和掩码操作通常一起使用:
a = np.array([[1], [10], [1], [0], [5]]) mask = np.array([[0], [1], [0], [1], [0]], dtype='uint8') c = cv2.bitwise_and(a, a) c_mask = cv2.bitwise_and(a, a, mask=mask) print(c) print(c_mask)
[[ 1]
[10]
[ 1]
[ 0]
[ 5]]
[[ 0]
[10]
[ 0]
[ 0]
[ 0]]
经过掩码操作,mask 置零的位置在 a 中也会被置零,mask 置一的位置在 a 中保持不变。
到此这篇关于OpenCV 之按位运算举例解析的文章就介绍到这了,更多相关OpenCV 按位运算内容请搜索易盾网络以前的文章或继续浏览下面的相关文章希望大家以后多多支持易盾网络!

