opencv怎么分别计算两条线段?for (int i = 0; i < lines->total; i++){ \x05\x05CvPoint* line = (CvPoint*)cvGetSeqElem (lines,i); \x05\x05double slope = ((double)(line[0].y - line[1].y))/((double)(line[0].x - line[1].x)); \x05\

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 08:31:25

opencv怎么分别计算两条线段?for (int i = 0; i < lines->total; i++){ \x05\x05CvPoint* line = (CvPoint*)cvGetSeqElem (lines,i); \x05\x05double slope = ((double)(line[0].y - line[1].y))/((double)(line[0].x - line[1].x)); \x05\
opencv怎么分别计算两条线段?
for (int i = 0; i < lines->total; i++){  
    \x05\x05CvPoint* line = (CvPoint*)cvGetSeqElem (lines,i); 
    \x05\x05double slope = ((double)(line[0].y - line[1].y))/((double)(line[0].x - line[1].x));
    \x05\x05if(atan(slope)/CV_PI*180 > -20 && atan(slope)/CV_PI*180 < -5){
         cvLine (pImgDst,line[0],line[1],CV_RGB(255,0,0),2,8);
    \x05\x05}
\x05}


用霍夫变换找到的两条线段,然后用CVLINE画了出来. 我想请问一下,怎么才能分别得到这两条线段的端点的位置呢?



line[0].x line[1].x 是线段两点的x坐标,但是现在是两条线段 ,不是很清楚,应该怎么区分.而且这两条红色线段是可能上下左右移动的.

opencv怎么分别计算两条线段?for (int i = 0; i < lines->total; i++){ \x05\x05CvPoint* line = (CvPoint*)cvGetSeqElem (lines,i); \x05\x05double slope = ((double)(line[0].y - line[1].y))/((double)(line[0].x - line[1].x)); \x05\
我的一点想法:因为是多条线段,将你找到的线段用矩形轮廓包围起来,逐点扫描,利用灰度阈值(因为你已经用红色标示,我建议使用R通道)找出该矩形区域内所有灰度级别在阈值内的点,根据X坐标和Y坐标就可判断首尾坐标,因为是直线,那么x坐标最小的肯定是首,x坐标最大的肯定是尾嘛!可以自己在坐标纸上试着研究一下!逻辑上很简单的.但是我觉得霍夫变换肯定已经可以直接输出坐标了,只是你没找到对应的参数而已,否则你这条线断不可能画得出来,也就是说坐标其实已经计算了,只需要你输出就可以了.