2

我在 OpenCV 中使用 Canny() 函数如下

Mat detected_edges = GetImage...;
Canny( detected_edges, detected_edges, 20, 20*3, kernel_size );

我的问题是这个函数的结果只有一个黑白图像,我想得到检测到的一组边缘。

在 OpenCV 文档上写道

该函数在输入图像图像中查找边缘,并使用 Canny 算法在输出地图边缘中标记它们。threshold1 和 threshold2 之间的最小值用于边缘链接。最大值用于查找强边缘的初始段。

但我不知道如何从结果图像中提取线条,有人可以帮助我。

UPDATE下面我用来测试的图像,这个图像包括 Canny 函数的结果

在此处输入图像描述

4

4 回答 4

4

正如 berak 的回答指出的那样,您可以在执行 Canny 边缘检测后使用findContoursHough变换来查找线条。

但是我想补充一点,在执行 Canny 边缘检测和查找线之前进行一些图像处理可能是有益的。例如,您似乎在地板上有很多不需要的轮廓,并且在您的 Canny 结果周围还发现了白色“规格”。

平滑图像会有所帮助,也许还可以使用均值偏移算法按颜色分割图像。您可能想探索其他处理图像的新颖方法。

于 2013-09-09T14:30:32.910 回答
3

根据您要检索的形状,

于 2013-09-09T11:50:23.787 回答
2

Canny 算法不知道边缘的实际形状。这些花哨的一像素宽的线实际上是简单边缘检测 Sobel 算子的峰值,用非极大值抑制提取。Canny 不会将像素连接成链或段。它可以在内部形成连接的组件以应用滞后阈值,但这是实现细节。

您必须自己做,请参阅 berak 的答案以了解可能的例程。

于 2013-09-09T12:11:44.047 回答
2

正如 berak 所说,您可以尝试在边缘检测后使用 findContours 来查找连接的组件。这里还有另一个关于这个的stackoverflow问题: OpenCV中的连接组件

这是一个例子: http ://docs.opencv.org/doc/tutorials/imgproc/shapeescriptors/find_contours/find_contours.html

请注意,在这种情况下,他们使用它来绘制,但您可以将其用于您选择的任何目的。

于 2013-10-05T20:26:54.467 回答