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类方法__init__和__del__构造、析构过程分析
Mar 06 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python数据可视化正态分布简单分析及实现代码
Dec 04 Python
Python Socket使用实例
Dec 18 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
学python爬虫能做什么
Jul 29 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
法压式咖啡之制作法
2021/03/03 冲泡冲煮
PHP的ASP防火墙
2006/10/09 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php提示Failed to write session data错误的解决方法
2014/12/17 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
几个javascript操作word的参考代码
2009/10/26 Javascript
浅析Javascript使用include/require
2013/11/13 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
移动端横屏的JS代码(beta)
2016/05/16 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
Javascript读写cookie的实例源码
2019/03/16 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Django 前后台的数据传递的方法
2017/08/08 Python
python flask框架实现重定向功能示例
2019/07/02 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
化工专业应届生求职信
2013/11/08 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
计算机科学系职业生涯规划书
2014/03/08 职场文书
怀念母亲教学反思
2014/04/28 职场文书
特教教师先进事迹
2014/05/21 职场文书
高中综合实践活动总结
2014/07/07 职场文书
中学教师个人总结
2015/02/10 职场文书
法学专业求职信范文
2015/03/19 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL