cvRedirectErrorに設定するコールバック関数を独自に設定することで、エラーの際に従来のようなメッセージボックスによるエラーメッセージの表示ではなく、.NET Frameworkの例外が投げられるようになりました。
例として以下のようなコードを書いてみます。平滑化のウィンドウサイズが-1なのでエラーが起こります。
IplImage img = new IplImage(10, 10, BitDepth.U8, 1); Cv.Smooth(img, img, SmoothType.Median, -1, -1);
これを実行します。これまでは、このようなOpenCVに起因するエラーはWindowsでは以下のように表示されていました。
この後OpenCvSharpではAccessViolationExceptionが発生して落ちる、という流れになっていました。しかしどうせならAccessViolationExceptionではなくOpenCVのエラーが例外として発生する方がスマートです。今回の更新で、以下のように例外がOpenCVExceptionとして発生するようになりました。
これにより例外をtry-catchで捕捉したりできます。もっと早く実装するべきでした・・・
なお、もし従来のメッセージボックスでの表示に戻したい場合は、
Cv.RedirectError(CvDll.ErrorHandlerDefault);
とします。需要が思いつきませんが。
いい感じに更新がたまってきたので、そろそろリリースしようかな。
Essential OpenCV Programming―With Visual C++ 2008
- 作者: 谷尻豊寿
- 出版社/メーカー: カットシステム
- 発売日: 2009/10
- メディア: 単行本
- クリック: 42回
- この商品を含むブログ (3件) を見る