《计算机视觉算法:基于OpenCV的计算机应用开发》 —3.4.5 搜索和定位功能

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

3.4.5 搜索和定位功能

在处理计算机视觉项目时,你将面临无数场景和案例,比如需要查找某些像素或最大值(最亮像素点)等。OpenCV库包含许多这类函数,本节的主题就来一一介绍它们。

3.4.5.1 定位非零元素

在根据阈值查找图像中的特定区域,或者查找特定颜色所覆盖的区域时,定位或计数非零元素的功能非常有用。OpenCV中的findNonZero和countNonZero函数,可以查找或计数图像中具有非零值(或较亮)的像素。

下面是一个示例,描述了如何使用findNonZero函数查找灰度图像中的第一个非黑色像素并打印其位置:

 image.png

下面是另一个示例代码,显示如何在灰度图像中计算黑色像素的百分比:

 image.png

3.4.5.2 定位最小和最大元素

在图像或矩阵中定位最亮(最大)和最暗(最小)点是计算机视觉中对图像而言最重要的两种搜索类型,特别是在执行某些类型的阈值算法或模板匹配函数之后(我们将在接下来的章节中了解)。OpenCV提供以下两个函数来查找全局最小值和最大值,以及它们在矩阵中的位置:

 image.png

minMaxLoc函数搜索整个图像(仅对单通道)以找到最亮和最暗的点,并返回最亮和最暗像素的值及其位置,而minMaxIdx函数返回指向找到的最小和最大位置的指针,而不是位置(带有x和y的Point对象)。下面是该函数的用法:

 image.png

这是使用minMaxIdx函数的示例:

 image.png

3.4.5.3 查找表转换

在计算机视觉中,用给定表中的像素值替换原有像素值称为查找表变换。这乍听起来有点令人困惑,但是使用查找表修改图像是一种非常强大而简单的方法。让我们用实例看一下它的用法。

假设有一个示例图像,我们需要用绝对白色替换亮像素(值大于175),用绝对黑色替换暗像素(值小于125),并保留其余像素为原有的值。在OpenCV中要执行这样的任务,我们可以简单地使用查找表Mat对象和LUT函数:

 image.png

 

下图描绘了在示例图像上执行此查找表变换的结果。如你所见,查找表变换可以在彩***像(右侧)和灰度(左侧)图像上执行:

 image.png

在需要用给定值替换像素时,适当地使用LUT函数可以为计算机视觉问题带来许多创造性的解决方案。


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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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