计算轮廓中像素的有效方法

时间:2011-12-17 10:42:52

标签: opencv

给定轮廓,计算属于轮廓的像素的有效方法是什么?

我尝试使用 opencv 功能
    cv :: pointPolygonTest()

但功能效率极低,需要花费大量时间才能获得更大的轮廓 请建议

3 个答案:

答案 0 :(得分:1)

我想你已经使用findContours()函数提取了轮廓。

然后,您可以直接使用contourArea()

cout << Contour area is << contourArea(contours[k]) ;

答案 1 :(得分:0)

我认为你可以进行简单的递归遍历,填充从单个轮廓点开始的区域。如果它是col-first我会认为你可以使用行迭代器。

如果您最关心效率,您可以将递归展开为循环并执行for-unlooping。

答案 2 :(得分:0)

如果contourArea没有给出预期结果,您可以采用以下方法:

  1. 在新的空垫中复制轮廓
  2. 在新的子矩阵上应用countNonZero,您将获得非黑色像素的数量

        //1. Copy the contour in a new empty Mat
        Rect cRect = boundingRect(*it); //it is an iterator for your contours vector
        Mat subImg = dilatedImg(cRect);
        double cArea = countNonZero(subImg);
    
  3. 注意:如果您没有二进制图像,则可能需要先对其进行阈值处理才能计算出正确的像素。