这对于直接使用 OpenCV 的 C++ 开发人员来说一定很简单。但是,我使用的是 Emgu(.NET 的 OpenCV 包装器),在最新版本中,我们有CvInvoke.FindContours
返回 void 的方法,输出结果由参数引用传递,类型为VectorOfVectorOfPoint
.
这是一个简单的调用:
//outputResult is a VectorOfVectorOfPoint
CvInvoke.FindContours(inputImage, outputResult, null, RetrType.Tree,
ChainApproxMethod.ChainApproxSimple);
对于RetrType.List
模式,我们可以将结果转换为一些数组并轻松地遍历所有轮廓。但是在这里,我想浏览树中的所有轮廓。我想我们必须在这里使用指针(通过Ptr
输出结果的属性访问)对本机(不安全)C++ 代码做一些事情。但我想知道是否有更适合 .NET 的解决方案。如果即使使用指针是唯一的解决方案,我仍然不知道如何深入研究它Ptr
以浏览轮廓树。
Emgu 安装附带的示例代码有一个片段 using CvInvoke.FindContourTree
(并返回 a int[,]
)。