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   
---------------------------