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的web框架中配置app的教程
Apr 30 Python
Python使用ntplib库同步校准当地时间的方法
Jul 02 Python
Python全局变量用法实例分析
Jul 19 Python
python利用微信公众号实现报警功能
Jun 10 Python
终端命令查看TensorFlow版本号及路径的方法
Jun 13 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
python实现词法分析器
Jan 31 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
Pytorch根据layers的name冻结训练方式
Jan 06 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
Apr 08 Python
Pytorch DataLoader shuffle验证方式
Jun 02 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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
德生9700DX电路分析
2021/03/02 无线电
PHP中PDO的错误处理
2011/09/04 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
php PDO异常处理详解
2016/11/20 PHP
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
2011/04/27 Javascript
jquery获取焦点和失去焦点事件代码
2013/04/21 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
JS 全屏和退出全屏详解及实例代码
2016/11/07 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
jQuery插件FusionCharts实现的2D柱状图效果示例【附demo源码下载】
2017/03/06 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
js中url对象化管理分析
2017/12/29 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
python制作小说爬虫实录
2017/08/14 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
python程序 创建多线程过程详解
2019/09/23 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
python实现处理mysql结果输出方式
2020/04/09 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
复古服装:RetroStage
2019/05/10 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
入学申请自荐信范文
2014/02/26 职场文书
学校感恩教育活动总结
2014/07/07 职场文书
2015年端午节活动方案
2015/05/05 职场文书