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原始套接字编程示例分享
Feb 21 Python
Python数据结构之翻转链表
Feb 25 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
利用Python如何将数据写到CSV文件中
Jun 05 Python
解决Python下json.loads()中文字符出错的问题
Dec 19 Python
python 监听salt job状态,并任务数据推送到redis中的方法
Jan 14 Python
Python实现使用request模块下载图片demo示例
May 24 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
Python3并发写文件与Python对比
Nov 20 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
Python numpy大矩阵运算内存不足如何解决
Nov 19 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 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
javascript 解析url的search方法
2010/02/09 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
jQuery功能函数详解
2015/02/01 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
vue项目中用cdn优化的方法
2018/01/03 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
vue的keep-alive用法技巧
2019/08/15 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
Python操作json数据的一个简单例子
2014/04/17 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
幼儿园大班毕业感言
2014/02/06 职场文书
运动会演讲稿
2014/05/07 职场文书
刘公岛导游词
2015/02/05 职场文书
中学教师个人总结
2015/02/10 职场文书
清洁工个人工作总结
2015/03/05 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
PyTorch dropout设置训练和测试模式的实现
2021/05/27 Python
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技