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的线程来解决生产者消费问题的示例
Apr 02 Python
用Python进行行为驱动开发的入门教程
Apr 23 Python
python获取本地计算机名字的方法
Apr 29 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
Python调用C++程序的方法详解
Jan 24 Python
Python合并多个Excel数据的方法
Jul 16 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
Jul 25 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 Python
Django通过json格式收集主机信息
May 29 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
python模块内置属性概念及实例
Feb 18 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
php 远程图片保存到本地的函数类
2008/12/08 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
php开发文档 会员收费1期
2012/08/14 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery使用serialize()表单序列化时出现中文乱码问题的解决办法
2016/07/27 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
React 条件渲染最佳实践小结(7种)
2020/09/27 Javascript
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python变量赋值的秘密分享
2018/04/03 Python
详解python配置虚拟环境
2019/04/08 Python
Python求均值,方差,标准差的实例
2019/06/29 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
大学生专科毕业生自我评价
2013/11/17 职场文书
卫生巾广告词
2014/03/18 职场文书
乡镇挂职心得体会
2014/09/04 职场文书
家属答谢词
2015/01/05 职场文书
感恩主题班会教案
2015/08/12 职场文书