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实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
快速入手Python字符编码
Aug 03 Python
python daemon守护进程实现
Aug 27 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
Python安装pycurl失败的解决方法
Oct 15 Python
创建Django项目图文实例详解
Jun 06 Python
Python实现一个带权无回置随机抽选函数的方法
Jul 24 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
Python socket非阻塞模块应用示例
Sep 12 Python
python实现连续变量最优分箱详解--CART算法
Nov 22 Python
python基于win32api实现键盘输入
Dec 09 Python
python 对象真假值的实例(哪些视为False)
Dec 11 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP源码分析之变量的存储过程分解
2014/07/03 PHP
PHP封装curl的调用接口及常用函数详解
2018/05/31 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
FireFox下XML对象转化成字符串的解决方法
2011/12/09 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
select自定义小三角样式代码(实用总结)
2017/08/18 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
vue中引用阿里字体图标的方法
2018/02/10 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
Python验证企业工商注册码
2015/10/25 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
Django forms组件的使用教程
2018/10/08 Python
Python中一般处理中文的几种方法
2019/03/06 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
文明学生事迹材料
2014/01/29 职场文书
博士生求职信
2014/07/06 职场文书
升学宴演讲稿
2014/09/01 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
五年级学生期末评语
2014/12/26 职场文书
电气工程师岗位职责
2015/02/12 职场文书
创业计划书之干洗店
2019/09/10 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
MySQL创建管理HASH分区
2022/04/13 MySQL