OpenCV 2.0 を使ってみよう(失敗した)(解決した)
解決編: OpenCV 2.0 利用プログラムでの 0xc0150002 エラーが解決した - BiBoLoG
画像ファイルを読み込んで表示して破棄するコードを書いた.失敗した.デバッグビルドで生成したファイルを実行できなかった.
Microsoft Visual C++ 2008 再頒布可能パッケージ(あるいは 2005 SP1 の再頒布可能パッケージ)を導入したらいいのかと思ってvcredist_x86.exe を実行したら既に入っていて,「修復」したらいいのかと思って試したが変わらなかった.
試しにリリースビルドしたら,成功した.使用している Visual Studio が Express Edition ゆえの,OpenMP ライブラリをリリースビルド用しかない Windows SDK for Windows Server 2008 and .NET Framework 3.5 で代替した行為に起因するものかと思った.
cxmisc.h を修正する.56行目からの次の記述を変更する.
#ifdef _OPENMP #include "omp.h" #endif
デバッグビルド時に omp.h を読み込むとき,_DEBUG を一旦外す.そして改めてつける.
#ifdef _OPENMP #ifdef _DEBUG #undef _DEBUG #include "omp.h" #define _DEBUG #else #include "omp.h" #endif #endif
外した.デバッグビルドは通れど,同じエラーで実行が出来なかった.
コード
#include <opencv/cv.h> #include <opencv/highgui.h> #ifdef _DEBUG #pragma comment( lib, "cv200d.lib" ) #pragma comment( lib, "cxcore200d.lib" ) #pragma comment( lib, "highgui200d.lib" ) #else #pragma comment( lib, "cv200.lib" ) #pragma comment( lib, "cxcore200.lib" ) #pragma comment( lib, "highgui200.lib" ) #endif const char *filename = "c:/data/image/lena.png"; const char *window_name = "lena.png"; int main(int argc, char **argv) { IplImage *image; image = cvLoadImage(filename); cvNamedWindow(window_name); cvShowImage(window_name, image); cvWaitKey(); cvReleaseImage(&image); cvDestroyWindow(window_name); return 0; }
エラーメッセージ
--------------------------- testLoadImage.exe - アプリケーション エラー --------------------------- アプリケーションを正しく初期化できませんでした (0xc0150002)。[OK] をクリックしてアプリケーションを終了してください。 --------------------------- OK ---------------------------