语境 :
本讲座的第 8 页说 OpenCV HoughLines函数返回一个 N x 2 线参数rho和theta数组,该数组存储在名为lines的数组中。
然后为了从这些角度实际创建线,我们有一些公式,稍后我们使用线函数。这些公式在下面的代码中进行了解释。
代码 :
//Assuming we start our program with the Input Image as shown below.
//This array will be used for storing rho and theta as N x 2 array
vector<Vec2f> lines;
//The input bw_roi is a canny image with detected edges
HoughLines(bw_roi, lines, 1, CV_PI/180, 70, 0, 0); '
//These formulae below do the line estimation based on rho and theta
for( size_t i = 0; i < lines.size(); i++ )
{
float rho = lines[i][0], theta = lines[i][1];
Point2d pt1, pt2;
double m;
double a = cos(theta), b = sin(theta);
double x0 = a*rho, y0 = b*rho;
//When we use 1000 below we get Observation 1 output.
//But if we use 200, we get Observation 2 output.
pt1.x = cvRound(x0 + 1000*(-b));
pt1.y = cvRound(y0 + 1000*(a));
pt2.x = cvRound(x0 - 1000*(-b));
pt2.y = cvRound(y0 - 1000*(a));
//This line function is independent of HoughLines function
//and is used for drawing any type of line in OpenCV
line(frame, pt1, pt2, Scalar(0,0,255), 3, LINE_AA);
}
输入图像:
观察1:
观察 2:
问题:
在上面显示的代码中,如果我们将数字与 a、-a、b 和 -b 相乘,我们会得到不同长度的行。当我乘以 200 而不是 1000(导致观察 1)时,得到了观察 2。
有关更多信息,请参阅上面显示的代码第 18 行和第 19 行中的注释。
问题:
当我们从 HoughLines 输出中绘制线条时,我们如何控制线条的起点和终点?
例如,我希望观察 2 中的右车道(从左上角指向右下角的红线)从屏幕的右下角开始并指向屏幕的左上角(就像左车道的镜像)。