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数据类型详解(三)元祖:tuple
May 08 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
python对excel文档去重及求和的实例
Apr 18 Python
influx+grafana自定义python采集数据和一些坑的总结
Sep 17 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Python 如何对文件目录操作
Jul 10 Python
python如何利用paramiko执行服务器命令
Nov 07 Python
python爬虫中的url下载器用法详解
Nov 30 Python
python3.9之你应该知道的新特性详解
Apr 29 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
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP结合Redis+MySQL实现冷热数据交换应用案例详解
2019/07/09 PHP
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
完美解决IE低版本不支持call与apply的问题
2013/12/05 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
js+HTML5实现视频截图的方法
2015/06/16 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
2016/05/21 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
JS实现页面内跳转的简单代码
2017/09/03 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
基于vue.js实现的分页
2018/03/13 Javascript
vue中$refs, $emit, $on, $once, $off的使用详解
2019/05/26 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
Django使用模板后无法找到静态资源文件问题解决
2019/07/19 Python
python实现单链表的方法示例
2019/09/03 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
国培计划培训感言
2014/03/11 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
2014年民政工作总结
2014/11/26 职场文书
小鞋子观后感
2015/06/05 职场文书
诚实守信主题班会
2015/08/13 职场文书
婚庆答谢词大全
2015/09/29 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP
python基础之错误和异常处理
2021/10/24 Python
javascript实现计算器功能详解流程
2021/11/01 Javascript
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏