将一个点的坐标分配给另一个OpenCV C

Assigning coordinates of a point to another OpenCV C + +

本文关键字:分配 坐标 另一个 OpenCV 一个      更新时间:2023-10-16

i进行了轮廓点(约300-1000点)的翻译,即,我更改了其x和y坐标,以将向量xoy的中心移动到重力中心,并使用此公式将其移动到重心:

vector<vector<Point> > contours_poly( contours.size() ); 
vector<vector<Point> > contours( contours.size() ); 
for(unsigned int i=0;i<contours.size();i++)
  {
  approxPolyDP( Mat(contours[i]), contours_poly[i], 2, true );
    convexHull( Mat(contours[i]), hull[i], false );
  }

/// centre de gravité
vector<Moments> mu(contours.size() );
  for( int i = 0; i < contours.size(); i++ ){
      mu[i] = moments( contours[i], false );
  }
vector<Point2f> mc( contours.size() );
  for( int i = 0; i < contours.size(); i++ ){
    mc[i] = Point2f( mu[i].m10/mu[i].m00 , mu[i].m01/mu[i].m00 );
  }
 /// Translation*          the program bug here !!
 for(i=0; i < contours.size(); i++)
 { contours_poly[1][i].x -= mc[1].x;
   contours_poly[1][i].y -= mc[1].y;
  } 
 /// draw the new contour
 for(unsigned int i=0;i<contours.size();i++)
  {
  drawContours( drawing, contours_poly, i, colors, 1, 8, vector<Vec4i>(), 0, Point() );
  }

,但我不知道该错误是否是通过大量点的修改或公式为false生成的,因为这是结果: the application has requested the Runtime to terminate it in an unusual way.

谢谢。

您不应该更改for循环的界限吗?

for(i=0; i < contours[0].size(); i++)
{ 
    contours_poly[0][i].x = contours_poly[0][i].x - mc[1].x;
    contours_poly[0][i].y = contours_poly[0][i].y - mc[1].y;
    contours_poly[1][i].x = contours_poly[1][i].x - mc[1].x;
    contours_poly[1][i].y = contours_poly[1][i].y - mc[1].y; 
}