Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv中的HoughLines变换_C++_Opencv_Hough Transform - Fatal编程技术网

C++ opencv中的HoughLines变换

C++ opencv中的HoughLines变换,c++,opencv,hough-transform,C++,Opencv,Hough Transform,我正在使用opencv和Eclipse进行图像处理 vector<Vec2f> lines; HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 ); for( size_t i = 0; i < lines.size(); i++ ) { float rho = lines[i][0], theta = lines[i][1]; Point pt1, pt2; dou

我正在使用opencv和Eclipse进行图像处理

  vector<Vec2f> lines;  
  HoughLines(dst, lines, 1, CV_PI/180, 100, 0, 0 );

  for( size_t i = 0; i < lines.size(); i++ )  
  {  
     float rho = lines[i][0], theta = lines[i][1];  
     Point pt1, pt2;  
     double a = cos(theta), b = sin(theta);  
     double x0 = a*rho, y0 = b*rho;  
     pt1.x = cvRound(x0 + 1000*(-b));  
     pt1.y = cvRound(y0 + 1000*(a));  
     pt2.x = cvRound(x0 - 1000*(-b));  
     pt2.y = cvRound(y0 - 1000*(a));  
     line( cdst, pt1, pt2, Scalar(0,0,255), 3, CV_AA);  
  }  
我不明白为什么1000的乘法是在直线上进行的

pt1.x = cvRound(x0 + 1000*(-b));  
请试着用简单的语言来解释这一点。
提前感谢

代码似乎试图从Hough Transform函数返回的参数中划出一条线。1000的乘法使点从起始位置沿直线移动(方向相反,这就是为什么pt1加和pt2减),以便实际绘制直线。该数字的不同值应提供不同的线段长度。如果您感到好奇,请尝试用变量(如
line\u length
)替换该值,然后更改该变量的值,看看它如何影响输出的外观。

问题已经得到了回答。但由于我花了最后15分钟来绘制这个图表,我还是把它贴出来吧。也许这有助于:

所以你得到的是一个点
p0=(x0,y0)
,它在直线上。
然后,计算直线上的另外两个点,每个方向距离
p0
1000个单位。

下面是对这段代码的详细解释:

 pt1.x = cvRound(x0 + 1000*(-b));  
 pt1.y = cvRound(y0 + 1000*(a));  
 pt2.x = cvRound(x0 - 1000*(-b));  
 pt2.y = cvRound(y0 - 1000*(a));
(点击图片查看完整尺寸)


在这种情况下,
d1=d2=1000

很抱歉抢走了你的风头;我真的很喜欢你的图表!你花了些时间帮我解决这件事,真是太好了。从下一次开始,在提问之前,我会花更多的时间寻找答案。谢谢你的回答。这确实帮了大忙。
 pt1.x = cvRound(x0 + 1000*(-b));  
 pt1.y = cvRound(y0 + 1000*(a));  
 pt2.x = cvRound(x0 - 1000*(-b));  
 pt2.y = cvRound(y0 - 1000*(a));