如何从圆心中调整线条

时间:2016-07-01 01:31:46

标签: c++ opencv image-processing

我想像这张照片一样从圆心做拟合线,而不是想找到像p7,p8,p3,p3,p1那样的圆的相交坐标: enter image description here

所以我写了这段代码

     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 ); }
      for( int i = 0; i< contours.size(); i++ )
      {
        cout<<" "<<mc[i]<<endl;
      //    circle( contourImage, mc[i], 4,Scalar( 0, 0, 255 ) , 1, 1, 0 );
    fitLine(mc);
    int lefty = (-lines[2]*lines[1]/lines[0])+lines[3];
    int righty = ((image.cols-lines[2])*lines[1]/lines[0])+lines[3];

    line(contourImage,mc[i],Point(309,165),Scalar(255,0,0),2);
  // line(contourImage,mc[i].x,m.c[i].y,Scalar(0,0,125),1,8,0);
   imshow("fitline",contourImage);

但是我得到了这个结果: enter image description here

在此之后我想找到p7和p8坐标,p5和p6坐标,p4和p1坐标以及p3和p2坐标 另外我的函数fitLine在这里:

 vector<float> fitLine(vector<Point2f>  points){ 
    vector<float> line; 
    cv::fitLine(points,line,CV_DIST_L2,0,0.001,0.001); 
    return line; 
}  

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

我被认为是,你知道半径和中心。你必须从中心画出8行(360/8)的角度差。

x2 = center(x)+ radius(x)+ cos(theta);

y2 = center(y)+ radius(y)+ sin(theta);

theta = 3.14 * angle / 180; 试试这个......

相关问题