我在OpenCV中使用Canny()函数,如下所示
Mat detected_edges = GetImage...;
Canny( detected_edges, detected_edges, 20, 20*3, kernel_size );我的问题是这个函数的结果只是一个黑白图像,我想要得到检测到的一组边缘。
在OpenCV上
该函数在输入图像中查找边缘,并使用Canny算法在输出映射边缘进行标记。threshold1和threshold2之间的最小值用于边缘链接。最大值用于寻找强边的初始段。
但是我不知道如何从结果图像中提取线条,有人可以帮我。
更新用于下面测试的图像,此图像包括Canny函数的结果

发布于 2013-09-09 11:50:23
取决于你想要的形状,
发布于 2013-09-09 14:30:32
正如berak的答案所指出的,在执行Canny边缘检测之后,您可以使用findContours和霍夫转换来查找直线。
然而,我想补充的是,在执行Canny边缘检测和查找线条之前,做一些图像处理可能是有益的。例如,你似乎得到了很多不必要的轮廓在地板上,也有白色的‘规格’周围发现你的Canny结果。
平滑图像将有所帮助,以及可能使用均值移位算法来分割您的图像的颜色。也许还有其他处理你的图像的新方法,你可能会想要探索。
发布于 2013-09-09 12:11:44
Canny算法不知道边缘的实际形状。这些花哨的单像素宽线实际上是简单边缘检测Sobel算子的峰值,用非极大值抑制提取。Canny不将像素连接到链或段中。它可以内部形成连接的组件来应用滞后阈值,但这是实现细节。
你必须自己去做,看看贝拉克对可能的例程的回答。
https://stackoverflow.com/questions/18697427
复制相似问题