私の背景はC++で、OpenCVを使用するアプリケーションのうちEmguCVを使用するC#アプリケーションに翻訳しようとしています。私はEmguCVのドキュメントとWikiとStackOverflow Q/Asを基本的な問題のいくつかを解決するのに運がない人間的に可能な限り深く読んだ。この時点で、私はEmguCVについての考え方に根本的に欠陥があるのだろうかと思います。Emgu CV 3.1を使用した正しいメモリ管理方法
それはMat
私の場合には(
IInputOutputArray
秒を返すことをポイントに、独自のメモリ管理の面倒を見るの下に、私は、EmguCVはのは
CvInvoke.FloodFill(IInputOutputArray, IInputOutputArray, ...)
を使用して
FloodFill
を言わせためのC++ライブラリへのインターフェースを提供してきたという印象の下にあった
)はすべて世話をしています。しかし実際には、CvInvoke.FloodFill
への呼び出しは、dll内からの例外を伴い失敗します。
int i = ...
int j = ...
int intensity = ...
int height = img.Rows;
int width = img.Cols;
Mat outputMask = new Mat(height + 2, width + 2, DepthType.Cv8U, 1);
Rectangle dummy = new Rectangle();
CvInvoke.FloodFill(img, outputMask, new Point(i, j), new MCvScalar(255), out dummy, new MCvScalar(intensity), new MCvScalar(intensity), Connectivity.EightConnected, FloodFillType.MaskOnly);
しかし、コールは役に立たない例外の説明で失敗します。
これは私が持っているものです。私はGCHandle
割り振りと他の方法の下に生データにアクセスできるようにピン配置を使用しましたが、私はCvInvoke.FloodFill
はローカルMat
で呼び出されたときに安全であると信じています。
私の質問は、EmguCVがC++とOpenCVで自分のバックグラウンドで使用されることになっていることを完全に忘れているかどうかです。もしそうなら、そのような関数を呼び出す正しい方法は何ですか?