cv :: arclength用什么算法来计算周长?

时间:2015-03-24 08:30:00

标签: opencv

我目前正在做一个项目,要求我使用一些结构分析,比如寻找周边和区域。我已经成功获得了物体的轮廓。 当我使用contour.size()函数时,它返回1108(在这种情况下) 当我使用cv :: arclength(contour)函数时,它返回1200。

周长不应该是轮廓的点数(轮廓是物体的外部边界)?我应该相信哪一个?

1 个答案:

答案 0 :(得分:0)

不一定,cv::arclength总结了曲线中连续点之间的欧氏距离。

以下是cv::arclength的代码段:

...
const Point2f* ptf = curve.ptr<Point2f>();
...
for( i = 0; i < count; i++ )
{
    Point2f p = ptf[i];

    float dx = p.x - prev.x, dy = p.y - prev.y;
    buf[j] = dx*dx + dy*dy;

    if( ++j == N || i == count-1 )
    {
        Mat bufmat(1, j, CV_32F, buf);
        sqrt(bufmat, bufmat);
        for( ; j > 0; j-- )
            perimeter += buf[j-1];
    }

    prev = p;
}

return perimeter;