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 相关文章推荐
Django静态资源URL STATIC_ROOT的配置方法
Nov 08 Python
详解Python的Django框架中的templates设置
May 11 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
python生成二维码的实例详解
Oct 29 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
使用PyCharm安装pytest及requests的问题
Jul 31 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写UltraEdit插件脚本实现方法
2011/12/26 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
jquery插件之easing使用
2010/08/19 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
2016/08/01 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[34:08]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS EG
2018/03/30 DOTA
开源Web应用框架Django图文教程
2017/03/09 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python绘制圆柱体的方法
2018/07/02 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
Keras自定义IOU方式
2020/06/10 Python
tensorflow 大于某个值为1,小于为0的实例
2020/06/30 Python
video.js支持m3u8格式直播的实现示例
2020/05/20 HTML / CSS
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
小学社团活动总结
2014/06/27 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
小学推普周活动总结
2015/05/07 职场文书
社区党务工作总结2015
2015/05/19 职场文书
消夏晚会主持词
2015/06/30 职场文书
我爱我班主题班会
2015/08/13 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
2016高考寄语集锦
2015/12/04 职场文书