GUST NOTCH? DIARY

OpenCV で実行時に cv::Exception がでる場合の対処方法

顔検出の nested_cascade の使い方を試そうと思って、サンプルとして付いている facedetect.cpp をビルドしてみた。すると、ビルドは通るが実行時に cv::Exception の例外が発生して止まってしまう。ステップで確認してみたところ、具体的には、cvLoad のところで発生する。
調べてみたところ、バージョン 1.1pre のころからあるバグらしい。しばらく 1.0 を使っていて、最近 2.1 に上げたので、今更ながらに遭遇してしまったようだ。
原因は、cxcore.lib の関数を cv.lib がロードされる前に呼んでしまうと、メモリ配置上の問題が生じてしまうということのようだ。なので、先に cv の関数を呼んでやると解決する。
cvLoadImage して cvReleaseImage したりするというのよりもシンプルな感じだったのは以下のもの。

CvHaarClassifierCascade * cascade = 0;
cvReleaseHaarClassifierCascade(&cascade);

参考にしたのは以下のところ。