これは、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 のインストールに付随するサンプル コードには、CvInvoke.FindContourTree
代わりに を使用するスニペットがあります (これは を返しますint[,]
)。