《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.3.3 比较操作
3.3.3 比较操作
将两个图像相互比较(或与给定值进行比较)可能非常有用,特别是对于生成可用于各种其他算法的掩码,掩码可用于追踪图像中的某些感兴趣对象,也可以用来对隔离区域(掩码区域)的图像执行操作。OpenCV提供了一些函数来执行按元素比较。例如,compare函数可用于将两个图像相互比较。如下所示:
前两个参数是参与比较的第一张和第二张图像。结果将保存到第三个Mat对象中,最后一个参数(必须是CmpTypes枚举中的条目)用于选择比较类型,可以是以下任何一种类型:
CMP_EQ:比较第一张图像是否等于第二张图像。
CMP_GT:比较第一张图像是否大于第二张图像。
CMP_GE:比较第一张图像是否大于或等于第二张图像。
CMP_LT:比较第一张图像是否小于第二张图像。
CMP_LE:比较第一张图像是否小于或等于第二张图像。
CMP_NE:比较第一张图像是否不等于第二张图像。
请注意,我们仍在讨论元素操作,因此当我们说第一张图像小于或等于第二张图像时,我们实际是指第一张图像中的每个像素的值小于或等于第二张图像中对应像素的值,依此类推。
请注意,你还可以使用重载的C++运算符来实现与compare函数相同的功能。以下是每种比较类型的方式:
inRange函数是OpenCV中另一个有用的比较函数,可用于查找在某个上限和下限值之间的像素。你可以使用任何现有图像作为边界值矩阵,也可以自己创建它们。下面是一个示例代码,可用于在灰度图像中查找0到50之间的像素值:
请注意,lb和hb是和源图像具有相同大小和类型的Mat对象,只是lb用零填充,而hb用50进行填充。这样,当调用inRange时,它会检查源图像的每个像素及其在lb和hb中对应的像素,如果源图像的像素值位于对应的范围内,则将结果中的对应像素置为白色。
下图描绘了在我们的示例图像上执行inRange函数的结果:
min和max函数,从函数名就知道,是另外两个比较函数,可用于比较两个图像(逐个元素比较)并找出最小或最大像素值。下面是一个例子:
或者你可以使用max来查找最大值:
简单地说,这两个函数对相同大小和类型的两个图像进行比较,并将结果矩阵中的对应像素置为来自输入图像的最小或最大像素值。
- 点赞
- 收藏
- 关注作者
评论(0)