gpt4 book ai didi

c++ - 使用 HoughLinesP 进行线检测

转载 作者:行者123 更新时间:2023-11-28 06:08:04 24 4
gpt4 key购买 nike

我尝试使用 OpenCV 和 C++ 从输入视频中检测街道的线条。我正在使用 HoughLinesP 并且我只想检测分隔街道的线,例如水平线或垂直线。
使用 HoughLinesP(dst, lines, 1, CV_PI/180, 8, 80, 3) ,我检测到所有的线,所以我将 double theta ( CV_PI/180) 更改为此 HoughLinesP(dst, lines, 10*CV_PI/180<=theta<=80*CV_PI/180 & 110*CV_PI/180<=theta<=170*CV_PI/180, 8, 80, 3);但它不起作用,因为控制台只显示没有任何类型线条的视频。

最佳答案

HoughLinesP 的第四个参数不是一个角度值,它告诉 opencv 只检测从 OX 轴(即极坐标)定向的线。相反,传入的角度值告诉 opencv 算法从 0 迭代到 PI(或 2*PI,取决于算法的实现方式),并将该角度作为迭代步骤,例如通过 PI/180 从 0 迭代到 PI 将在 HoughLinesP 中进行 180 次迭代以尝试找到给定 (r,alpha) 的直线。

找到具有给定角度范围(不是最稳健的)极坐标的线的解决方案可能是使用 HoughLinesP 检测所有线,然后迭代它们,计算角度坐标并过滤掉那些具有极坐标的线一个给定的范围。

编辑(使用 C++11 的算法草案):

  vector<Vec4i> detectedLines;
HoughLinesP(dst, lines, 1, CV_PI/180, 50, 50, 10 );
vector<Vec4i> filteredLines(detectedLines.size());
const float downAngleRange = 30*CV_PI/180;
const float upAngleRange = 60*CV_PI/180;
auto it = copy_if(detectedLines.begin(), detectedLines.end(),
filteredLines.begin(),
[](const Vec4i &v) {
float angle = calculateAnglePolarCord(v);
return angle <= upAngleRange && angle >= downAngleRange;
});
filteredLInes.resize(std::distance(filteredLines.begin(),it));

其中 calculateAnglePolarCord 是一种在给定线上计算其第二个(角度)极坐标的方法。

请记住实现良好的 float 比较技术。

关于c++ - 使用 HoughLinesP 进行线检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31969073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com