我在OpenCV中使用Canny()函数,如下所示
Mat detected_edges = GetImage...;
Canny( detected_edges, detected_edges, 20, 20*3, kernel_size );
我的问题是这个功能的结果只是一个黑白图像,我想获得检测到的边缘集。
在OpenCV docs上写道
该函数在输入图像图像中查找边缘并将其标记为 使用Canny算法输出地图边缘。最小的价值 阈值1和阈值2之间用于边缘链接。该 最大值用于查找强边的初始段。
但我不知道如何从结果图像中提取线条,有人可以帮助我。
UPDATE 我以前用来测试的图片,此图片包含Canny功能的结果
答案 0 :(得分:4)
正如berak的回答所指出的那样,您可以使用findContours和Hough转换来执行Canny边缘检测后查找行。
但是我想补充一点,在执行Canny边缘检测和查找线之前进行一些图像处理可能是有益的。例如,你似乎在地板上得到了许多不需要的轮廓,并且在你的Canny结果周围也发现了白色的“规格”。
Smoothing图片会有所帮助,也可能会使用mean shift algorithm按颜色分割图片。可能还有其他一些处理图像的新方法,您可能想要探索它们。
答案 1 :(得分:3)
取决于您尝试检索的形状,
houghlines / circles
答案 2 :(得分:2)
Canny算法不知道边缘的实际形状。这些花哨的单像素宽线实际上是简单边缘检测Sobel算子的峰值,用非最大值抑制提取。 Canny不会将像素连接到链或段中。它可以在内部形成连接组件以应用滞后阈值,但这是实现细节。
你必须自己动手,看看berak对可能的惯例的回答。
答案 3 :(得分:2)
正如berak所说,你可以尝试使用findContours在边缘检测后找到连接的组件。这里有另一个stackoverflow问题: connected components in OpenCV
这是一个例子: http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html
请注意,在这种情况下,他们使用它来绘制,但您可以将它用于您选择的任何目的。