これは、OpenCVを直接使用するC++開発者にとっては単純でなければなりません。しかし私が使用しているのはEmgu(.NET用のOpenCVラッパー)で、最新のバージョンではCvInvoke.FindContours
のvoidメソッドが返され、出力結果はパラメータ参照で渡され、タイプはVectorOfVectorOfPoint
です。FindContoursメソッドで見つかった輪郭の階層をナビゲートしますか?
//outputResult is a VectorOfVectorOfPoint
CvInvoke.FindContours(inputImage, outputResult, null, RetrType.Tree,
ChainApproxMethod.ChainApproxSimple);
モードRetrType.List
のために、私たちは簡単にすべての輪郭を通じて配列とループの一部の配列に結果を変換することができます:ここでは
Ptr
プロパティを介してアクセス)を使ってここでネイティブ(安全でない)C++コードで何かをしなければならないと思います。しかし、これにはより.NET対応のソリューションがあるのだろうかと思います。ポインタを使用しても唯一の解決策であれば、輪郭ツリーをナビゲートするには、その
Ptr
をどのように掘り下げるのかまだ分かりません。
Emguインストールに伴うサンプルコードの代わりにCvInvoke.FindContourTree
を使用するスニペットがあります(int[,]
を返します)。輪郭の階層を取得するには
nullに設定した3番目のパラメータに階層が出力されていませんか? RetrType.ListまたはTreeを使用して階層情報を取得し、Matタイプの新しい変数を作成し、それを第3のパラメータ(現在はnullです)として渡すかどうかにかかわらず、まったく同じ方法でcountourを列挙できます。 – Evk
@エヴァークはい、私は渡すべきものが第三のポジションにあることを理解していませんでした。そして、私がそれを知っていても、それがどんなタイプなのかわからないでしょう。今、あなたは私が「マット」を渡すべきであることを私に知らせる。しかし、私はちょうどそのタイプについてより多くのものを見つけようとしていますし、ツリーをナビゲートするのを助けるために簡単に認識できるメンバーはないようです。可能であれば、あなたの答えにいくつかのサンプルコードを与えてください。それは非常に高く評価されるだろう。ありがとうございました! – Hopeless