作业帮 > 综合 > 作业

opencv如何确定两条直线的焦点坐标

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/26 03:18:10
opencv如何确定两条直线的焦点坐标
最好有代码,
opencv只有曲线才有焦点,如双曲线椭圆等存在焦点.我不知道你说的是直线的交点吧.
既然要求交点坐标,那你应该提供两条直线的方程或者是直线的斜率和截距,opencv有专门的霍夫变换可以检测直线,建议你通过标准的霍夫变换提取直线的方程,然后扫描求取交点坐标,当然交点的坐标要控制其差值在一个像素之内时算作是交点.请参考.
再问: 我网上找的代码,用霍夫变换检测直线,一条线段检测出两天直线,怎么办?想问下你所说的控制其差值在一个像素之内是怎么弄的
再答: CvMemStorage *storage=cvCreateMemStorage(0);
\x09CvSeq* seq = cvCreateSeq(CV_SEQ_ELTYPE_POINT,sizeof(CvSeq),sizeof(CvPoint),storage);
\x09seq = cvHoughLines2(line,storage,CV_HOUGH_STANDARD,1,CV_PI/180,130,0,0);
\x09if (seq->total==1)
\x09{
\x09\x09float* line0 = (float*)cvGetSeqElem(seq,0);//用GetSeqElem获得直线
\x09\x09float rho = line0[0];
\x09\x09float theta = line0[1];//对于SHT和MSHT(标准变换)这里line[0],line[1]是rho(与像素相干单位的距//离精度)和theta(弧度测量的角度精度)\x09\x09\x09\x09
\x09\x09CvPoint pt1, pt2;
\x09\x09double a = cos(theta), b = sin(theta);
\x09\x09double x0 = a*rho,y0 = b*rho;
\x09\x09pt1.x = cvRound(x0 + 1000*(-b));
\x09\x09pt1.y = cvRound(y0 + 1000*(a));
\x09\x09pt2.x = cvRound(x0 - 1000*(-b));
\x09\x09pt2.y = cvRound(y0 - 1000*(a));
\x09\x09double kk = 1.0*(pt2.y-pt1.y)/(pt2.x-pt1.x);
}
再问: 我用了一下好像还是会出现两条线,不知是不是我的代码问题。
你有完整代码能让我参考下吗。自己接触opencv不久,水平不够,只能拜托别人了,谢谢你了。
再答: 我的是项目代码,不能给你,抱歉。
再问: 那能问下你的那部分代码里那个参数是焦点坐标吗
再答: 我的是一条缝的坐标。