C++ opencv中的HoughLines变换
我正在使用opencv和Eclipse进行图像处理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
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));