2012-07-18 22 views
1

我试图计算图像重心,像这样:找到一个图像的轮廓质心

// 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,谁能告诉我是什么这适应错了吗?

回答

6

你已经写centroid.x += (points[i].x*points[(i+1)%numPoints].x)*a; 相反,它应该是centroid.x += (points[i].x+points[(i+1)%numPoints].x)*a; 你有+我更换*

+1

我真是个傻瓜,谢谢。 – user293895 2012-07-18 13:24:13

+1

它发生了。人非圣贤孰能。 :d – 2012-07-18 13:25:15

1

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