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 相关文章推荐
linux系统使用python获取内存使用信息脚本分享
Jan 15 Python
python实现多线程行情抓取工具的方法
Feb 28 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
Numpy数据类型转换astype,dtype的方法
Jun 09 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
Aug 31 Python
基于python实现学生管理系统
Oct 17 Python
python导入pandas具体步骤方法
Jun 23 Python
详解python实现数据归一化处理的方式:(0,1)标准化
Jul 17 Python
flask实现验证码并验证功能
Dec 05 Python
Python模块的制作方法实例分析
Dec 21 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
基于Python实现的购物商城管理系统
Apr 27 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
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
javascript利用apply和arguments复用方法
2013/11/25 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
2017/12/07 Javascript
在Vue组件中使用 TypeScript的方法
2018/02/28 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
VUE 实现动态给对象增加属性,并触发视图更新操作示例
2019/11/29 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
Python判断字符串与大小写转换
2015/06/08 Python
Python文件的读写和异常代码示例
2017/10/31 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
python模式 工厂模式原理及实例详解
2020/02/11 Python
python实现低通滤波器代码
2020/02/26 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
澳大利亚实惠时尚女装商店:Katies
2019/06/16 全球购物
高级Java程序员面试要点
2013/08/02 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
群众路线专项整治方案
2014/10/27 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS