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 相关文章推荐
python3实现域名查询和whois查询功能
Jun 21 Python
python+selenium打印当前页面的titl和url方法
Jun 22 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
python使用zip将list转为json的方法
Dec 31 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
python应用文件读取与登录注册功能
Sep 23 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
基于python实现获取网页图片过程解析
May 11 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
基于logstash实现日志文件同步elasticsearch
Aug 06 Python
python装饰器代码深入讲解
Mar 01 Python
关于python pygame游戏进行声音添加的技巧
Oct 24 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
火影忍者:三大瞳力之一的白眼,为什么没有写轮眼那么出色?
2020/03/02 日漫
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
比较完整的微信开发php代码
2016/08/02 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
html5+javascript制作简易画板附图
2014/04/25 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
详解javascript遍历方式
2015/11/11 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
微信小程序使用wxParse解析html的方法教程
2018/07/06 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
Python深入学习之装饰器
2014/08/31 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
python PrettyTable模块的安装与简单应用
2019/01/11 Python
关于Python解包知识点总结
2020/05/05 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
注塑工厂厂长岗位职责
2013/12/02 职场文书
学生请假条
2014/04/11 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
党员对照检查材料
2014/09/22 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
听课评课活动心得体会
2016/01/15 职场文书
详解用Python把PDF转为Word方法总结
2021/04/27 Python
Python实战之用tkinter库做一个鼠标模拟点击器
2021/04/27 Python
总结Python使用过程中的bug
2021/06/18 Python