将图片看成类型为uint8的像素矩阵,因此我们可以将两个像素矩阵进行加减乘除等一些列运算,这也被称为像素运算,像素运算包括两种:
本小节主要介绍像素运算中的逻辑运算。
01
逻辑运算
我们将图像转换为uint8类型的像素矩阵,每一个像素点都是8位二进制表示的,也就是每个像素点的范围都是 [0 - 255] 之间,我们将每一个像素点看成是8位的二进制,因此两张图片对应像素点就可以进行逻辑运算。这里还需要注意两点:
下面为了效果明显还是使用两张相同shape的图像,图片名分别为"01.jpg"以及"02.jpg"。
02
逻辑运算~与
为了要说明逻辑与运算的操作,下面先来看看逻辑与的规则:
简单来说就是有0则0,都为1则1,在OpenCV中提供了方便的逻辑运算的一系列函数:
执行的结果如下:
我们不着急解释运算的结果,先来看一个简答的小例子,通过这个小例子,我们就可以知道OpenCV中对两张图片进行逻辑与运算的具体流程。
[[[0 0 0]]]
这里需要注意的是这里使用的是三通道,也就是三个像素点组合表示图像。我们知道在BGR的色彩空间中,三个通道都是0组合表示黑色:
从表格可以看出,黑色与任何像素点做逻辑与运算的结果都是0,也就是说只要进行逻辑与运算图片中有黑色,那么对应结果肯定为黑色。
[[[ 12 221 123]]]
通过结果可以看出,白色与任何颜色(除了黑色)进行逻辑与运算的结果为颜色本身。
当然如果任意颜色的话原理相同,这里不再赘述。我们可以看出将"Linux"和"Windows"进行逻辑与运算的结果,可以看出"Linux"中的黑色与任何颜色逻辑与结果都是黑色,但是在"Linux"中白色部分中,由于相对应的"Windows"区域颜色不是黑色,因此,得到图片结果是"Linux"白色区域相对应的"Windows"区域。由此可以看出,仅仅拥有黑色和白色的图像与任何图像进行逻辑与操作,结果会将白色部分对应的区域过滤出来,而其余黑色对应的区域结果全为黑色,这起到了一个遮罩层的作用。
02
逻辑运算~或
逻辑或的运算规则:
可以看出只要不全是0结果都是1,只有当全是0的时候结果才为0。
执行结果:
只有两张图片对应位置都是黑色的时候结果才为黑色,当某一张图片中为白色的时候,对应逻辑或运算结果也为白色,其余颜色与前面分析相一致。
03
逻辑运算~非
逻辑非运算的规则:
从逻辑非中的运算规则中,可以看出此时的逻辑运算只应用在一张图片上。
执行结果:
其实对于图像的逻辑运算比较简单,只要知道逻辑运算的规则。在前面对逻辑与运算进行了深入的分析,由于这几个逻辑运算仅仅是进行运算的规则不同,所以在后面的介绍中没有继续解释,只是给出了结果。