【问题标题】:Finding an Images Contours Centroid寻找图像轮廓质心
【发布时间】:2012-07-18 13:06:18
【问题描述】:

我正在尝试像这样计算图像质心:

// Calculate centroid
    double signedArea = 0.0;
    sskp_point centroid;
    for(int i=0;i<numPoints;i++)
    {
        double a = (points[i].x*points[(i+1)%numPoints].y)-(points[(i+1)%numPoints].x*points[i].y);
        signedArea += a;
        centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a;
        centroid.y += (points[i].y*points[(i+1)%numPoints].y)*a;
        printf("points[%d] = { %f, %f }\n",i,points[i].x,points[i].y);
    }
    signedArea /= 2.0;
    centroid.x /= (6*signedArea);
    centroid.y /= (6*signedArea);
    printf("centroid = { %f, %f }\n",centroid.x,centroid.y);

我已经从算法here 改编了这个,但是它给了我错误的results,谁能告诉我这个改编有什么问题?

【问题讨论】:

    标签: c++ c image-processing centroid


    【解决方案1】:

    你写了centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; 相反,它应该是centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a; 您必须在此处将* 替换为+。

    【讨论】:

      【解决方案2】:

      我看了一点你拿这个样本的线程,我认为你应该有 centroid.x += (points[i].x + points[(i+1)%numPoints].x)*a; centroid.y += (points[i].y + points[(i+1)%numPoints].y)*a;

      【讨论】:

        猜你喜欢
        • 2018-09-29
        • 1970-01-01
        • 2019-07-18
        • 2012-01-04
        • 2018-09-09
        • 2013-01-05
        • 2012-01-16
        • 2018-02-21
        • 1970-01-01
        相关资源
        最近更新 更多