gpt4 book ai didi

python - opencv检测虚线

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:52 26 4
gpt4 key购买 nike

我有一个由某种虚线组成的图像:

注意:打开图像,将其放大并查看所有小点

Dotted lines

我如何使用 openCV 来检测和参数化这些线?

此图像是机器人上激光测距扫描仪的值,我需要尽可能获得所有线条。


HoughLinesP 函数应该是这个的理想选择?

我尝试了以下代码:

    //converts laser range readings to a binary image.
cv::Mat binaryImg = laserRangesToBinaryImage();

cv::Mat cdst;
cvtColor(binaryImg, cdst, CV_GRAY2BGR);

std::vector<cv::Vec4i> lines;
HoughLinesP(binaryImg, lines, 2, 5.0*CV_PI/180.0, 1, 2, 20 );
for( size_t i = 0; i < lines.size(); i++ )
{
cv::Vec4i l = lines[i];
line( cdst, cv::Point(l[0], l[1]), cv::Point(l[2], l[3]), cv::Scalar(0,0,255), 3, CV_AA);
}

cv::imshow("Hough output", cdst);

这会导致大约 50 到 60 行(在 Ubuntu 14.04 上使用 openCV 2.8.3):

Hough transform results

这里最大的问题是有多个分离的线段应该检测到一条完整的线。所以这些段没有正确连接。有些线太短,甚至没有检测到。

最佳结果应如下所示(手动创建),大约有 20 条线段:

Manually annotated image

我怎样才能达到这个结果?

最佳答案

如果你还没有,看看这个 tutorial .

基本上,您应该对这三个参数(HoughLinesP function 的最后三个参数)采取行动,直到达到检测到的线的正确长度:

  1. 阈值:“检测”一条线的最小交叉点数(在 Hough space 中)。
  2. minLinLength: 可以形成一条线的最小点数。 点数少于此数量的线将被忽略。
  3. ma​​xLineGap:要考虑的两点之间的最大间隙 同一条线。

数学形态学 ( closing ) 也有帮助,正如评论中提到的那样。然而,帮助将是有限的:对于这样的任务,建议使用一个小的 3x3 内核,因此如果一条线上的某些像素彼此相距太远,则无论如何都不会填充间隙。

关于python - opencv检测虚线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29200472/

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