我想像这张照片一样从圆心做拟合线,而不是想找到像p7,p8,p3,p3,p1那样的圆的相交坐标:
所以我写了这段代码
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);
在此之后我想找到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;
}
你能帮助我吗?
答案 0 :(得分:0)
我被认为是,你知道半径和中心。你必须从中心画出8行(360/8)的角度差。
x2 = center(x)+ radius(x)+ cos(theta);
y2 = center(y)+ radius(y)+ sin(theta);
theta = 3.14 * angle / 180; 试试这个......