给定轮廓,计算属于轮廓的像素的有效方法是什么?
我尝试使用 opencv 功能
cv :: pointPolygonTest()
但功能效率极低,需要花费大量时间才能获得更大的轮廓 请建议
答案 0 :(得分:1)
我想你已经使用findContours()
函数提取了轮廓。
然后,您可以直接使用contourArea()
。
cout << Contour area is << contourArea(contours[k]) ;
答案 1 :(得分:0)
我认为你可以进行简单的递归遍历,填充从单个轮廓点开始的区域。如果它是col-first我会认为你可以使用行迭代器。
如果您最关心效率,您可以将递归展开为循环并执行for-unlooping。
答案 2 :(得分:0)
如果contourArea
没有给出预期结果,您可以采用以下方法:
在新的子矩阵上应用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);
注意:如果您没有二进制图像,则可能需要先对其进行阈值处理才能计算出正确的像素。