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正规则表达式学习指南
Aug 02 Python
python获取list下标及其值的简单方法
Sep 12 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python基于ID3思想的决策树
Jan 03 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
python write无法写入文件的解决方法
Jan 23 Python
Python 学习教程之networkx
Apr 15 Python
django使用admin站点上传图片的实例
Jul 28 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
Aug 12 Python
Python的Lambda函数用法详解
Sep 03 Python
Django实现文件上传下载
Oct 06 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 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邮件发送的两种方式
2020/04/28 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
php过滤htmlspecialchars() 函数实现把预定义的字符转换为 HTML 实体用法分析
2019/06/25 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
web页面数据展示新想法(json)
2010/06/08 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
Vue非父子组件通信详解
2017/06/12 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
使用python读取txt文件的内容,并删除重复的行数方法
2018/04/18 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python内置加密模块用法解析
2019/11/25 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
纯css3实现走马灯效果
2014/12/26 HTML / CSS
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
演讲主持词
2014/03/18 职场文书
法语专业求职信
2014/07/20 职场文书
工程承包协议书
2014/10/20 职场文书
围城读书笔记
2015/06/26 职场文书
小学教师教育随笔
2015/08/14 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js