OpenCV 之按位运算举例解析


Posted in Python onJune 19, 2020

文章介绍

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 按位运算内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python将人民币转换大写的脚本代码
Feb 10 Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 Python
Python求算数平方根和约数的方法汇总
Mar 09 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
Sep 05 Python
对Python3 goto 语句的使用方法详解
Feb 16 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
一行python实现树形结构的方法
Aug 09 Python
python多进程重复加载的解决方式
Dec 13 Python
Python selenium如何打包静态网页并下载
Aug 12 Python
Python 中的函数装饰器和闭包详解
Feb 06 Python
Python实现ElGamal加密算法的示例代码
Jun 19 #Python
python 字符串的驻留机制及优缺点
Jun 19 #Python
Keras自动下载的数据集/模型存放位置介绍
Jun 19 #Python
Python应用实现处理excel数据过程解析
Jun 19 #Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 #Python
Scrapy框架介绍之Puppeteer渲染的使用
Jun 19 #Python
Python内置方法和属性应用:反射和单例(推荐)
Jun 19 #Python
You might like
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
PHP+Apache+Mysql环境搭建教程
2016/08/01 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
2017/02/16 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
Bootstrap自定义文件上传下载样式
2016/05/26 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
react的滑动图片验证码组件的示例代码
2019/02/27 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
python自动格式化json文件的方法
2015/03/11 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
python socket通信编程实现文件上传代码实例
2019/12/14 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
CSS3制作酷炫的条纹背景
2017/11/09 HTML / CSS
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
连锁经营管理专业大学生求职信
2013/10/30 职场文书
学生会宣传部部长竞选演讲稿
2014/04/25 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
招标保密承诺书
2015/01/20 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB