OpenCV 之按位运算举例解析

作者:cofisher 时间:2023-04-15 02:07:57 

文章介绍

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 中保持不变。

来源:https://blog.csdn.net/qq_36758914/article/details/106836231

标签:OpenCV,按位运算
0
投稿

猜你喜欢

  • python使用requests.session模拟登录

    2022-09-12 19:17:24
  • asp 在线备份与恢复sqlserver数据库的代码

    2011-03-06 11:14:00
  • 用python的哈希函数对密码加密

    2021-06-10 21:02:58
  • Python中的异常类型及处理方式示例详解

    2022-10-27 14:55:58
  • python的pdb调试命令的命令整理及实例

    2022-10-01 01:47:12
  • Python识别html主要文本框过程解析

    2023-11-09 01:31:52
  • python 特有语法推导式的基本使用

    2023-06-25 01:39:58
  • MySQL单表ibd文件恢复方法详解

    2024-01-15 19:39:21
  • 使用python实现抓取腾讯视频所有电影的爬虫

    2022-05-09 12:19:03
  • Python图片处理之图片采样处理详解

    2021-01-14 12:58:36
  • 解读调用jupyter notebook文件内的函数一种简单方法

    2021-04-19 09:47:56
  • python中时间模块的基本使用教程

    2021-05-15 21:24:43
  • C#实例代码之抽奖升级版可以经表格数据导入数据库,抽奖设置,补抽

    2024-01-26 14:21:41
  • 一步一步教你创建SQL 2005计划任务应用图解教程

    2024-01-18 10:34:30
  • python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例

    2022-11-27 15:06:22
  • Python使用sftp实现传文件夹和文件

    2021-09-30 12:27:37
  • Python enumerate()计数器简化循环

    2022-07-31 22:15:43
  • 使用 XML HTTP Request 对象[翻译]

    2007-11-07 21:11:00
  • python编程控制Android手机操作技巧示例

    2021-12-01 07:59:05
  • PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解

    2022-04-18 16:28:45
  • asp之家 网络编程 m.aspxhome.com