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中mechanize库的简单使用示例
Jan 10 Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 Python
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
matplotlib给子图添加图例的方法
Aug 03 Python
python3实现点餐系统
Jan 24 Python
python创建n行m列数组示例
Dec 02 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
完美解决pycharm 不显示代码提示问题
Jun 02 Python
python中adb有什么功能
Jun 07 Python
python list等分并从等分的子集中随机选取一个数
Nov 16 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
2010/04/02 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
2015/03/03 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
Yii框架常见缓存应用实例小结
2019/09/09 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
关于捕获用户何时点击window.onbeforeunload的取消事件
2011/03/06 Javascript
document.createElement()用法
2013/03/13 Javascript
JS分页效果示例
2013/10/11 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
移动端js图片查看器
2016/11/17 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
使用Python实现简单的服务器功能
2017/08/25 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
python 实现任务管理清单案例
2020/04/25 Python
Python如何实现FTP功能
2020/05/28 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
《毛主席在花山》教学反思
2014/04/20 职场文书
借款担保书范文
2014/05/13 职场文书
英文商务邀请函范文
2015/01/31 职场文书
庆祝教师节主持词
2015/07/06 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang