《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.4.5 搜索和定位功能
3.4.5 搜索和定位功能
在处理计算机视觉项目时,你将面临无数场景和案例,比如需要查找某些像素或最大值(最亮像素点)等。OpenCV库包含许多这类函数,本节的主题就来一一介绍它们。
3.4.5.1 定位非零元素
在根据阈值查找图像中的特定区域,或者查找特定颜色所覆盖的区域时,定位或计数非零元素的功能非常有用。OpenCV中的findNonZero和countNonZero函数,可以查找或计数图像中具有非零值(或较亮)的像素。
下面是一个示例,描述了如何使用findNonZero函数查找灰度图像中的第一个非黑色像素并打印其位置:
下面是另一个示例代码,显示如何在灰度图像中计算黑色像素的百分比:
3.4.5.2 定位最小和最大元素
在图像或矩阵中定位最亮(最大)和最暗(最小)点是计算机视觉中对图像而言最重要的两种搜索类型,特别是在执行某些类型的阈值算法或模板匹配函数之后(我们将在接下来的章节中了解)。OpenCV提供以下两个函数来查找全局最小值和最大值,以及它们在矩阵中的位置:
minMaxLoc函数搜索整个图像(仅对单通道)以找到最亮和最暗的点,并返回最亮和最暗像素的值及其位置,而minMaxIdx函数返回指向找到的最小和最大位置的指针,而不是位置(带有x和y的Point对象)。下面是该函数的用法:
这是使用minMaxIdx函数的示例:
3.4.5.3 查找表转换
在计算机视觉中,用给定表中的像素值替换原有像素值称为查找表变换。这乍听起来有点令人困惑,但是使用查找表修改图像是一种非常强大而简单的方法。让我们用实例看一下它的用法。
假设有一个示例图像,我们需要用绝对白色替换亮像素(值大于175),用绝对黑色替换暗像素(值小于125),并保留其余像素为原有的值。在OpenCV中要执行这样的任务,我们可以简单地使用查找表Mat对象和LUT函数:
下图描绘了在示例图像上执行此查找表变换的结果。如你所见,查找表变换可以在彩***像(右侧)和灰度(左侧)图像上执行:
在需要用给定值替换像素时,适当地使用LUT函数可以为计算机视觉问题带来许多创造性的解决方案。
- 点赞
- 收藏
- 关注作者
评论(0)