OpenCV 之按位运算举例解析 |
您所在的位置:网站首页 › bitwise_and函数参数 › OpenCV 之按位运算举例解析 |
文章介绍 OpenCV 库中包含很多运算函数,这里着重介绍按位运算的基本原理并举例说明。 本篇文章中主要涉及到的函数有: 按位与:bitwise_and();按位或:bitwise_or();按位异或:bitwise_xor()。按位反转:bitwise_not();【注】以上所有运算皆基于二进制而来。 举例说明 1、bitwise_and() 代码语言:javascript复制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。 代码语言:javascript复制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 操作后的二进制转换回十进制并输出。 代码语言:javascript复制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 是因为: 代码语言:javascript复制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 操作后的二进制转换回十进制并输出。 代码语言:javascript复制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 是因为: 代码语言:javascript复制a = 10 b = 8 print(bin(a)) print(bin(b)) print(bin(a^b)) print(a^b)0b1010 0b1000 0b10 2 4、bitwise_not() 代码语言:javascript复制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。 掩码操作 按位与操作和掩码操作通常一起使用: 代码语言:javascript复制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 按位运算内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |