gpt4 book ai didi

c# - 浏览 FindContours 方法找到的轮廓层次结构?

转载 作者:太空狗 更新时间:2023-10-29 22:57:36 27 4
gpt4 key购买 nike

这对于直接使用 OpenCV 的 C++ 开发人员来说一定很简单。然而,我使用的是 Emgu(.NET 的 OpenCV 包装器),在最新版本中,我们有返回 void 的方法 CvInvoke.FindContours,输出结果通过参数引用传递,类型为VectorOfVectorOfPoint

这是一个简单的调用:

//outputResult is a VectorOfVectorOfPoint
CvInvoke.FindContours(inputImage, outputResult, null, RetrType.Tree,
ChainApproxMethod.ChainApproxSimple);

对于 RetrType.List 模式,我们可以将结果转换为一些数组数组并轻松循环遍历所有轮廓。但是在这里我想浏览树中的所有轮廓。我想我们必须在这里用指针(通过输出结果的 Ptr 属性访问)对 native (不安全的)C++ 代码做一些事情。但我想知道是否有更适合 .NET 的解决方案。即使使用指针是唯一的解决方案,我仍然不知道如何深入研究 Ptr 以在轮廓树中导航。

Emgu 安装附带的示例代码有一个使用 CvInvoke.FindContourTree 的片段(并且返回一个 int[,])。

最佳答案

要获取等高线的层次结构,您必须首先将一个Mat 对象传递给函数:

Mat hierarchy = new Mat() ;
CvInvoke.FindContours(inputImage, outputResult, hierarchy, RetrType.Tree,
ChainApproxMethod.ChainApproxSimple);

然后您可以按如下方式使用hierarchy 对象(有关 Python OpenCV 的更多详细信息,请参阅 here):

hierarchy 将是一个大小为 1 x outputResult x 4 的 Mat 对象。所以对于索引为 i 的轮廓:

  • hierachy[0,i,0] 是同一层级(具有相同父级)下一个轮廓的索引,如果不存在则为 - 1
  • hierachy[0,i,1] 是相同层级的上一个轮廓的索引,如果不存在则为 1
  • hierachy[0,i,2] 是轮廓 i 的 child 的索引,如果不存在则为 1
  • hierachy[0,i,3] 是轮廓 i 的父级的索引,如果不存在则为 1

这就是您使用层次结构对象的方式。

轮廓本身可以通过 outputResult 对象使用它们的索引进行访问。

关于c# - 浏览 FindContours 方法找到的轮廓层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37408481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com