【发布时间】:2015-06-30 14:06:26
【问题描述】:
我想检测一条线并提取它的两个端点。常用的方法是使用霍夫变换。幸运的是,OpenCV 中有一个sample 与物质有关,因此我画了一条线,其两个端点为p1(100,200), p2(400,200)。我认为上述方法只会为我提供这些要点。我的示例图片是
霍夫变换为我提供了两个图像
对于 Canny 过滤器,
在代码中,似乎检测到了两行。这解释了为什么红线较粗,这表明有两条线而不是一条。当我打印出行数时,它显示如下两个
lines.size(): 2
p1:<99,201> p2:<401,201>
lines.size(): 2
p1:<102,198> p2:<398,198>
为什么我得到两条线?
【问题讨论】:
-
取决于 HoughSpace 中 bin 的宽度,并非所有像素都可能分配给线条。尝试更宽/更少的垃圾箱。
-
你在 houghLines 之前使用 canny 边缘检测吗?您应该检查该中间图像的外观。渐变可能会在粗线的每一侧产生一个边缘。
-
@Micka,是的,样本实际上使用了精明算法。
-
你能贴出中间精明的图片吗?
-
@Micka,我已经在我的帖子中链接了整个代码。对于精明,
Mat dst, cdst; Canny(src, dst, 50, 200, 3); cvtColor(dst, cdst, CV_GRAY2BGR);
标签: c++ opencv image-processing line