【OpenCV C++】如何快速 高效的计算出图像中大于值的像素个数? 遍历比较吗? No,效率太低!那么如何更高效?

文章目录

  • 1 问题
  • 2 分析
  • 3 代码实现 (两种方法实现)
    • 方法1: 使用cv::compare
    • 方法2: 使用cv::threshold
    • 3.2 compare和threshold 看起来都有二值化效果? 那么二者效率?
  • 4 compare函数解释
    • 4.1 参数解释
    • 4.2 底层行为规则
    • 4.3 应用示例
    • 4.4 典型应用场景

1 问题

一幅图像的目标区域ROI尺寸为60*35的灰度图,快速计算出大于backVal的像素个数,其中backVal=200;
(注意这里只统计ROI区域的像素个数,一般来说只对目标区域处理,便于提高效率)
【OpenCV C++】如何快速 高效的计算出图像中大于值的像素个数? 遍历比较吗? No,效率太低!那么如何更高效?_第1张图片

2 分析

思路1:是遍历每个像素,然后比较是否大于200,统计次数。但这样做效率可能不高,尤其是当图像较大时。不过这里图像是60x35,不算太大,可能直接遍历也行。不过有没有更高效的方法呢?

记得OpenCV有一些矩阵操作函数,可能可以利用这些函数来避免显式循环。比如,比较操作可以用cv::compare或者直接使用矩阵表达式。然后统计非零元素的数量。这可能比逐个像素判断要快,尤其是对于较大的图像。

步骤:

  • 1.读取图像,确保是灰度图(单通道)。
  • 2.使用比较函数,将图像与backVal(200)进行比较,生成一个二值图像&

你可能感兴趣的:(OpenCV,C++,opencv,c++,计算机视觉)