《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3.2 按位逻辑操作

举报
华章计算机 发表于 2020/02/15 15:19:57 2020/02/15
【摘要】 本节书摘来自华章计算机《计算机视觉算法:基于OpenCV的计算机应用开发》 一书中第3章,第3.3.2节,作者是[伊朗] 阿明·艾哈迈迪·塔兹赫孔迪(Amin Ahmadi Tazehkandi) ,陈靖 杨欣 译。

3.3.2 按位逻辑操作

就像基本操作一样,你也可以对两个矩阵的所有元素或一个矩阵的所有元素和一个标量执行按位逻辑操作。因此,你可以使用以下函数:

 image.png

从名字中可以立即知道这些函数可以执行非(Not)、与(And)、或(Or)和异或(Exclusive OR)操作,但让我们看看如何在实例中使用它们。

首先,bitwise_not函数可以用来反转图像中所有像素的所有位。此功能与大多数照片编辑应用程序中的反转操作具有相同的效果。以下是它的使用方法:

 image.png

上面的代码也可以替换为以下代码,它在C ++中使用了重载的按位非运算符(~):

 image.png

如果图像是单色黑白图像,则结果中白色像素会被替换为黑色像素,反之亦然。如果图像是RGB彩***像,则结果将被反转(在其二进制意义上),如下图所示:

 image.png

bitwise_and函数或&运算符用于对两个图像或一个图像和一个标量的像素执行按位与运算。见下例:

 image.png

或者,你只需像如下代码那样使用&运算符:

 image.png

bitwise_and函数可以很容易地用于屏蔽和提取图像中的特定区域。例如,下图显示了bitwise_and如何保留图像的白色像素并删除黑色像素:

 image.png

除了屏蔽图像的某些特定区域之外,按位与操作可以用于完全过滤掉一个通道。为了能够做到这一点,你需要使用&运算符的第二种形式,它使用一个矩阵和一个标量,在矩阵的所有像素和该标量值上执行与运算。下面是一个示例代码,可用于屏蔽(清零)RGB彩***像中的绿色通道:

 image.png

现在,我们继续介绍下一个按位操作,按位或操作。bitwise_or和| 运算符都可以用于对两个图像或一个图像和一个标量执行按位或运算。下面是一个例子:

 image.png

与按位与操作类似,你可以使用| 运算符,见下例:

 image.png

如果说与操作用于保留非零像素(或非黑色像素),那么或操作则用于保留输入图像中任意一个具有更高值(或更亮)的像素。下面是在前面的示例图像上执行按位或运算的结果:

 image.png

与按位与操作类似,你也可以使用按位或操作来更新单个通道或图像的所有像素。下面是一个示例代码,显示如何仅更新RGB图像中的绿色通道,使其所有像素取最大值(255或十六进制FF),并保持其他通道不变:

 image.png

最后,你可以使用bitwise_xor或^运算符在两个图像或一个图像和一个标量的像素之间执行异或操作(Exclusive Or)。下面是一个例子:

 image.png

或者只需像下面那样使用^运算符:

 image.png

对上节中的示例图像执行异或操作,结果如下:

 image.png

注意这个操作如何导致掩码覆盖区域中像素的反转。请读者通过在纸上写下像素值并尝试自己计算结果来思考背后的原因。如果能够清楚地理解其行为,则可以使用异或操作,以及其他位操作,来执行许多其他计算机视觉任务。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。