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中threading超线程用法实例分析
May 16 Python
在Python中操作时间之strptime()方法的使用
Dec 30 Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
python网络爬虫学习笔记(1)
Apr 09 Python
解决python tkinter界面卡死的问题
Jul 17 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
Django静态文件加载失败解决方案
Aug 26 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
如何用Python 加密文件
Sep 10 Python
关于python类SortedList详解
Sep 04 Python
Python中的 Set 与 dict
Mar 13 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里的JS打印函数
2006/10/09 PHP
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
csdn 批量接受好友邀请
2009/02/19 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
js网页中的(运行代码)功能实现思路
2013/02/04 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
jQuery中outerHeight()方法用法实例
2015/01/19 Javascript
js实现简单随机抽奖的方法
2015/01/27 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
对Layer UI 模块化的用法详解
2019/09/26 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
Python统计单词出现的次数
2018/04/04 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Python3常用内置方法代码实例
2019/11/18 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
python中threading开启关闭线程操作
2020/05/02 Python
Python读取yaml文件的详细教程
2020/07/21 Python
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
跟单业务员岗位职责
2014/03/08 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
趣味运动会开幕词
2015/01/28 职场文书
出生证明范本
2015/06/15 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python