
OpenCV 之按位运算举例解析
发布日期:2021-05-06 23:44:01
浏览次数:45
分类:精选文章
本文共 1835 字,大约阅读时间需要 6 分钟。
文章目录
文章介绍
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 = 9b = 8print(bin(a))print(bin(b))print(bin(a & b))print(a & b)
0b10010b10000b10008
由此可见,按位与操作分成三步:
- 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 = 9b = 8print(bin(a))print(bin(b))print(bin(a | b))print(a | b)
0b10010b10000b10019
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 = 10b = 8print(bin(a))print(bin(b))print(bin(a^b))print(a^b)
0b10100b10000b102
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 中保持不变。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月25日 18时05分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
idea2020 没有 tomcat server
2019-03-05
jq动态修改元素的onclick属性的值
2019-03-05
为什么讨厌所谓仿生AI的说法
2019-03-05
ORACLE 客户端工具
2019-03-05
Elasticsearch下载慢?分享百度云下载-ELK
2019-03-05
云服务器springboot jar项目开启jmx remote监控-解决无法连接的问题
2019-03-05
文件上传-FileUpload
2019-03-05
快速排序
2019-03-05
Pyinstaller打包的exe文件过大的解决方法
2019-03-05
Linux的软链接跟Windows快捷方式一样?
2019-03-05
更改github的默认语言类型
2019-03-05
使用bigdecima实例化时传int和string时的精度丢失
2019-03-05
使用第三方sdk,微信wechat扫码登录
2019-03-05
mysql中的行转列
2019-03-05
java8中的闭包Function/BiFunction
2019-03-05
flink —— checkpoint机制
2019-03-05
shell脚本中冒泡排序、直接排序、反转排序
2019-03-05
WPS及Excel中Alt键的妙用 快捷键
2019-03-05