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字典get()方法用法分析
Apr 17 Python
Django中使用locals()函数的技巧
Jul 16 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
python3 pillow模块实现简单验证码
Oct 31 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
flask项目集成swagger的方法
Dec 09 Python
python Polars库的使用简介
Apr 21 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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学习之数组值的操作
2011/04/17 PHP
php发送post请求的三种方法
2014/02/11 PHP
php 魔术方法详解
2014/11/11 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
Python有序字典简单实现方法示例
2017/09/28 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
Python语言描述随机梯度下降法
2018/01/04 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python模糊图片过滤的方法
2018/12/14 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
化工专业应届生求职信
2013/11/08 职场文书
大学毕业生个人自荐信范文
2014/01/08 职场文书
生日寄语大全
2014/04/08 职场文书
计划生育工作总结2015
2015/04/03 职场文书
2016教师节问候语
2015/11/10 职场文书
python入门之算法学习
2021/04/22 Python
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
Tomcat弱口令复现及利用
2022/05/06 Servers
Redis主从复制操作和配置详情
2022/09/23 Redis