前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV-像素运算~逻辑运算

OpenCV-像素运算~逻辑运算

作者头像
触摸壹缕阳光
发布2019-11-13 14:04:40
7480
发布2019-11-13 14:04:40
举报

将图片看成类型为uint8的像素矩阵,因此我们可以将两个像素矩阵进行加减乘除等一些列运算,这也被称为像素运算,像素运算包括两种:

  1. 算术运算,比如加减乘除运算。可以调节图像的亮度以及对比度;
  2. 逻辑运算,比如与或非。可以通过逻辑运算完成遮罩层的控制。

本小节主要介绍像素运算中的逻辑运算。

01

逻辑运算

我们将图像转换为uint8类型的像素矩阵,每一个像素点都是8位二进制表示的,也就是每个像素点的范围都是 [0 - 255] 之间,我们将每一个像素点看成是8位的二进制,因此两张图片对应像素点就可以进行逻辑运算。这里还需要注意两点:

  1. 这里所说的像素点,对于单通道来说就是一个数值,而对于三通道的BGR图像来说,通过三个像素点表示图像;
  2. 和算术运算一致,要求进行逻辑运算的两张图片必须有相同的shape。

下面为了效果明显还是使用两张相同shape的图像,图片名分别为"01.jpg"以及"02.jpg"。

02

逻辑运算~与

为了要说明逻辑与运算的操作,下面先来看看逻辑与的规则:

简单来说就是有0则0,都为1则1,在OpenCV中提供了方便的逻辑运算的一系列函数:

执行的结果如下:

我们不着急解释运算的结果,先来看一个简答的小例子,通过这个小例子,我们就可以知道OpenCV中对两张图片进行逻辑与运算的具体流程。

代码语言:javascript
复制
[[[0 0 0]]]

这里需要注意的是这里使用的是三通道,也就是三个像素点组合表示图像。我们知道在BGR的色彩空间中,三个通道都是0组合表示黑色:

从表格可以看出,黑色与任何像素点做逻辑与运算的结果都是0,也就是说只要进行逻辑与运算图片中有黑色,那么对应结果肯定为黑色。

代码语言:javascript
复制
[[[ 12 221 123]]]

通过结果可以看出,白色与任何颜色(除了黑色)进行逻辑与运算的结果为颜色本身。

当然如果任意颜色的话原理相同,这里不再赘述。我们可以看出将"Linux"和"Windows"进行逻辑与运算的结果,可以看出"Linux"中的黑色与任何颜色逻辑与结果都是黑色,但是在"Linux"中白色部分中,由于相对应的"Windows"区域颜色不是黑色,因此,得到图片结果是"Linux"白色区域相对应的"Windows"区域。由此可以看出,仅仅拥有黑色和白色的图像与任何图像进行逻辑与操作,结果会将白色部分对应的区域过滤出来,而其余黑色对应的区域结果全为黑色,这起到了一个遮罩层的作用

02

逻辑运算~或

逻辑或的运算规则:

可以看出只要不全是0结果都是1,只有当全是0的时候结果才为0。

执行结果:

只有两张图片对应位置都是黑色的时候结果才为黑色,当某一张图片中为白色的时候,对应逻辑或运算结果也为白色,其余颜色与前面分析相一致。

03

逻辑运算~非

逻辑非运算的规则:

从逻辑非中的运算规则中,可以看出此时的逻辑运算只应用在一张图片上。

执行结果:

其实对于图像的逻辑运算比较简单,只要知道逻辑运算的规则。在前面对逻辑与运算进行了深入的分析,由于这几个逻辑运算仅仅是进行运算的规则不同,所以在后面的介绍中没有继续解释,只是给出了结果。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI机器学习与深度学习算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档