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 相关文章推荐
完美解决Python2操作中文名文件乱码的问题
Jan 04 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python使用Flask操作mysql实现登录功能
May 14 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
Python实现Singleton模式的方式详解
Aug 08 Python
python脚本执行CMD命令并返回结果的例子
Aug 14 Python
python进程池实现的多进程文件夹copy器完整示例
Nov 27 Python
python scatter函数用法实例详解
Feb 11 Python
python中可以声明变量类型吗
Jun 18 Python
jupyter notebook 写代码自动补全的实现
Nov 02 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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
抓取并下载CSS中所有图片文件的php代码
2011/09/26 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
初识php MVC
2014/09/10 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
javascript 延迟加载技术(lazyload)简单实现
2011/01/17 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
JavaScript之iterable_动力节点Java学院整理
2017/06/29 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
JS创建自定义对象的六种方法总结
2020/12/15 Javascript
js实现随机点名
2021/01/19 Javascript
Python httplib,smtplib使用方法
2008/09/06 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
2016/09/15 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
自荐信要包含哪些内容
2013/11/06 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
机关作风建设整改方案
2014/10/27 职场文书
2014年协会工作总结
2014/11/22 职场文书
企业财务人员岗位职责
2015/04/14 职场文书
政协工作总结2015
2015/05/20 职场文书
浅析Django接口版本控制
2021/06/26 Python