《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3.3 比较操作

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

3.3.3 比较操作

将两个图像相互比较(或与给定值进行比较)可能非常有用,特别是对于生成可用于各种其他算法的掩码,掩码可用于追踪图像中的某些感兴趣对象,也可以用来对隔离区域(掩码区域)的图像执行操作。OpenCV提供了一些函数来执行按元素比较。例如,compare函数可用于将两个图像相互比较。如下所示:

 image.png

前两个参数是参与比较的第一张和第二张图像。结果将保存到第三个Mat对象中,最后一个参数(必须是CmpTypes枚举中的条目)用于选择比较类型,可以是以下任何一种类型:

  • CMP_EQ:比较第一张图像是否等于第二张图像。

  • CMP_GT:比较第一张图像是否大于第二张图像。

  • CMP_GE:比较第一张图像是否大于或等于第二张图像。

  • CMP_LT:比较第一张图像是否小于第二张图像。

  • CMP_LE:比较第一张图像是否小于或等于第二张图像。

  • CMP_NE:比较第一张图像是否不等于第二张图像。

请注意,我们仍在讨论元素操作,因此当我们说第一张图像小于或等于第二张图像时,我们实际是指第一张图像中的每个像素的值小于或等于第二张图像中对应像素的值,依此类推。

请注意,你还可以使用重载的C++运算符来实现与compare函数相同的功能。以下是每种比较类型的方式:

 image.png

inRange函数是OpenCV中另一个有用的比较函数,可用于查找在某个上限和下限值之间的像素。你可以使用任何现有图像作为边界值矩阵,也可以自己创建它们。下面是一个示例代码,可用于在灰度图像中查找0到50之间的像素值:

 image.png

请注意,lb和hb是和源图像具有相同大小和类型的Mat对象,只是lb用零填充,而hb用50进行填充。这样,当调用inRange时,它会检查源图像的每个像素及其在lb和hb中对应的像素,如果源图像的像素值位于对应的范围内,则将结果中的对应像素置为白色。

下图描绘了在我们的示例图像上执行inRange函数的结果:

 image.png

min和max函数,从函数名就知道,是另外两个比较函数,可用于比较两个图像(逐个元素比较)并找出最小或最大像素值。下面是一个例子:

 image.png

或者你可以使用max来查找最大值:

 image.png

简单地说,这两个函数对相同大小和类型的两个图像进行比较,并将结果矩阵中的对应像素置为来自输入图像的最小或最大像素值。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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