Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV-如何从Canny函数的结果中提取边?_C++_Opencv - Fatal编程技术网

C++ OpenCV-如何从Canny函数的结果中提取边?

C++ OpenCV-如何从Canny函数的结果中提取边?,c++,opencv,C++,Opencv,我在OpenCV中使用Canny()函数,如下所示 Mat detected_edges = GetImage...; Canny( detected_edges, detected_edges, 20, 20*3, kernel_size ); 我的问题是这个函数的结果只是一个黑白图像,我想得到检测到的边缘集 在OpenCV文档上编写 该函数在输入图像中查找边并在中标记它们 使用Canny算法输出贴图边缘。最小值 threshold1和threshold2之间用于边缘链接。这个 最大值用于查

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

Mat detected_edges = GetImage...;
Canny( detected_edges, detected_edges, 20, 20*3, kernel_size );
我的问题是这个函数的结果只是一个黑白图像,我想得到检测到的边缘集

在OpenCV文档上编写

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

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

更新我在下面测试的图像,该图像包含Canny函数的结果


根据要检索的形状

  • /圈


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


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

正如berak的答案所指出的,在执行Canny边缘检测后,您可以使用和变换来查找线条

然而,我想补充一点,在执行Canny边缘检测和查找线条之前,进行一点图像处理可能是有益的。例如,你似乎在地板上得到了很多不想要的轮廓,在你精明的结果周围也发现了白色的“规格”


这张图片会很有帮助,也许还可以使用一个工具来按颜色分割你的图片。您可能还想探索处理图像的其他新方法。

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

以下是一个例子:


请注意,在本例中,他们使用它来绘图,但您可以将其用于您选择的任何目的。

您的测试是什么image@WangYudong:以上更新中的测试图像,谢谢!