エラーハンドリングに対応

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

Essential OpenCV Programming―With Visual C++ 2008