【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区域的像素个数,一般来说只对目标区域处理,便于提高效率)
2 分析
思路1:是遍历每个像素,然后比较是否大于200,统计次数。但这样做效率可能不高,尤其是当图像较大时。不过这里图像是60x35,不算太大,可能直接遍历也行。不过有没有更高效的方法呢?
记得OpenCV有一些矩阵操作函数,可能可以利用这些函数来避免显式循环。比如,比较操作可以用cv::compare或者直接使用矩阵表达式。然后统计非零元素的数量。这可能比逐个像素判断要快,尤其是对于较大的图像。
步骤:
- 1.读取图像,确保是灰度图(单通道)。
- 2.使用比较函数,将图像与backVal(200)进行比较,生成一个二值图像&