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安装mysql-python简明笔记(ubuntu环境)
Jun 25 Python
Python 中pandas.read_excel详细介绍
Jun 23 Python
Python探索之创建二叉树
Oct 25 Python
利用python爬取斗鱼app中照片方法实例
Dec 03 Python
基于Python List的赋值方法
Jun 23 Python
详解Django中六个常用的自定义装饰器
Jul 04 Python
对Python中plt的画图函数详解
Nov 07 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
python之pymysql模块简单应用示例代码
Dec 16 Python
使用python实现哈希表、字典、集合操作
Dec 22 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
Python 如何测试文件是否存在
Jul 31 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 file_exists问题杂谈
2012/05/07 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
Python基础语法(Python基础知识点)
2016/02/28 Python
python使用psutil模块获取系统状态
2016/08/27 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
pandas取出重复数据的方法
2019/07/04 Python
Python实用库 PrettyTable 学习笔记
2019/08/06 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
公益活动策划方案
2014/01/09 职场文书
网页美工求职信
2014/02/15 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
2016年公司新年寄语
2015/08/17 职场文书
青年教师听课心得体会
2016/01/15 职场文书
导游词之西安骊山
2019/12/03 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
Go本地测试解耦任务拆解及沟通详解Go本地测试的思路沟通的重要性总结
2022/06/21 Golang