2009年9月18日金曜日

MacとOpneCV(1.1pre)でステレオ画像処理

動機
こちらの記事でおもしろそうとおもったので.

参考
こちらの記事こちらの記事リファレンス
感謝!


やったこと1: OpenCV 1.1preについて
以前の記事に書いた通り
こちらからEnglish Versionの'OpenCV-Private-Framework-1.2.dmg'をdownload.
・インストールとしてOpenCV.frameworkフォルダを/Library/FrameworksフォルダへCopy.

やったこと2:Snow Leopard + Xcode 3.2で
2.1 プロジェクトは‘Applicatoin/Command Line Tool/Type C++ stdc++’を選択.

2.2 プロジェクトに既存のフレームワークとして‘/Library/Frameworks/OpenCV.framework’を追加
2.3 プロジェクトの情報(インスペクタ)でアーキテクチャを‘32-bit Universal’, 有効なアーキテクチャを‘i386’にする.

2.4 main.cppを編集
#include <OpenCV/cv.h>
#include <OpenCV/highgui.h>

int
main (int argc, char **argv)
{
IplImage *image_left, *image_right;

if (argc != 3 ||
(image_left = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
(image_right = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;

const char *winName = "Sample";
cvNamedWindow(winName, CV_WINDOW_AUTOSIZE);

CvSize size = cvGetSize(image_left);
if (0) { //切り替え
CvMat *disparity_left= cvCreateMat(size.height, size.width, CV_16S);
CvMat *disparity_right= cvCreateMat(size.height, size.width, CV_16S);
CvStereoGCState *state= cvCreateStereoGCState(16, 2);
cvFindStereoCorrespondenceGC(image_left, image_right, disparity_left, disparity_right, state, 0);
cvReleaseStereoGCState(&state);

CvMat *disparity_left_visual= cvCreateMat(size.height, size.width, CV_8U);
cvConvertScale(disparity_left, disparity_left_visual, -16);
cvShowImage(winName, disparity_left_visual);
}
else {
CvMat *disparity= cvCreateMat(size.height, size.width, CV_16S);
CvStereoBMState *state= cvCreateStereoBMState(CV_STEREO_BM_BASIC, 16);
cvFindStereoCorrespondenceBM(image_left, image_right, disparity, state);
cvReleaseStereoBMState(&state);

CvMat *disparity_visual= cvCreateMat(size.height, size.width, CV_8U);
cvConvertScale(disparity, disparity_visual, 1);
cvShowImage(winName, disparity_visual);
}
cvWaitKey(0);

return 0;
}

2.5 ビルド
2.6 できたのをコマンドラインで引数2つ(ステレオとなるイメージ)をつけて実行
> ./Sample imageLeft.jpg imageRight.jpg


以上

0 件のコメント: