VistaでOpenCV

Windows Vista SP1でOpenCVを使おうとしても、cvQueryFrame()で有効なデータが取れなかったというのは、以前のエントリでokzkさんが書いた通り。原因がわからなかったので、こちらのページで公開されているewclib.hを使ってcvQueryFrame()の代替コードを書きました。

カメラのデバイスやDirectShowを制御する部分はewclib.hで用意されているので、単純にキャプチャした画像を表示するだけならこんな感じ。

#include <cv.h>
#include <highgui.h>

#define EWC_TYPE MEDIASUBTYPE_RGB24
#include <ewclib.h>

#define SIZE_X 640
#define SIZE_Y 480
#define FPS 30
#define WINDOW_NAME "Capture"
#define CAM_NUM 0

int main() {
	EWC_Open(SIZE_X, SIZE_Y, FPS);

	IplImage* img = cvCreateImage(cvSize(SIZE_X, SIZE_Y), 8, 3);
	cvNamedWindow(WINDOW_NAME);

	while (1) {
		EWC_GetImage(CAM_NUM, img->imageData);
		cvShowImage(WINDOW_NAME, img);

		uchar key = cvWaitKey(10);
		if (key == 'q') {
			break;
		}
	}

	cvDestroyWindow(WINDOW_NAME);
	cvReleaseImage(&img);

	EWC_Close();

	return 0;
}

ewclib.hではMEDIASUBTYPE_RGB32がデフォルトなので、ewclib.hをincludeする前に”#define EWC_TYPE MEDIASUBTYPE_RGB24″として、画像の形式をOpenCV側に合わせます。

あとは、EWC_Open()でデバイスとewclibを初期化し、EWC_GetImage()でIplImage構造体のimageData領域に画像を書き込めばOK。キャプチャしたIplImageは、そのままOpenCVライブラリ関数群に渡して使うことができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*