とっととインストール!

で、ここは簡単にportsからインストールします。
みなさん、portsここからインストールしておいてくださいね。

で、OpenCVportsでインストールするには、下記のコマンド一発です。

# port install opencv

ここで、依存関係あるものはバリバリインストールされます。
インストールされるのは/opt/local/の下です。

さてさて、コード書いてみる

今回もお世話になった本にご登場願います。

OpenCV プログラミングブック

OpenCV プログラミングブック

はい、これのp.52のサンプルを書いてみます。
さて、viで書くかIDEで書くか悩んだんですが、Eclipseで書いてみたいと思います。

まずは、「ファイル」→「新規」→「Cプロジェクト」を選択します。

出来たプロジェクトを選択し、右クリックし、「新規」→「その他」で
Cのソースファイルを選びます

適当な名前でファイルを作成し、下記のコードを入れてみます。

#include <stdio.h>
#include <highgui.h>

int main(int argc, char** argv){
	int key;                              // キーボードから入力されたキー格納用変数
	CvCapture *capture;                   // カメラキャプチャ用構造体
	IplImage *frameImage;                 // キャプチャ画像
	char windowNameCapture[] = "Capture"; // キャプチャ画像を表示するウィンドウの名前

        // カメラ初期化
	if((capture = cvCreateCameraCapture(0)) == NULL){
                // カメラが見つからなかった時
		printf("カメラが見つかりませんでした");
		return -1;
	}

        //ウィンドウ作成
	cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE);

        // メインループ
	while(1){
                // カメラからの入力画像の1フレームをframeImageに格納する
		frameImage = cvQueryFrame(capture);

                // 作成したウィンドウに取得したフレームを表示する
		cvShowImage(windowNameCapture, frameImage);

                // 1ミリ秒の間にキーボードから入力されたキーを取得する
		key = cvWaitKey(1);

                // qが入力されていたら終了
		if(key == 'q'){
			break;
		}
	}

        // キャプチャを解放する
	cvReleaseCapture(&capture);

        // ウィンドウを終了する
	cvDestroyWindow(windowNameCapture);


	return 0;
}

コンパイルや!

さて、コンパイルされる前にEclipse側で設定しておく必要があります。

プロジェクトを選択し、右クリックから「プロパティ」をクリックします。

開いたウィンドゥで「C/C++ 一般」→「パスおよびシンボル」を選択し、「インクルード」から「追加」ボタンを押し、"/opt/local/include/opencv"を選んでOpenCVのヘッダファイルの場所を指定します。

次にライブラリの場所を指定するために同じ「C/C++ 一般」→「パスおよびシンボル」から「Library Paths」を選択し、「追加」ボタンを押し、"/opt/local/lib"を選びます。

最後に実際に引き込むライブラリを指定します。

開いているプロパティのウィンドゥから「C/C++ ビルド」→「設定」→「ツール設定」から「MAC OS X リンカー」→「ライブラリー」を選択します。
そこから追加で各ライブラリ(highgui,cxcore,ml,cvaux,cv)を追加します。

これでビルド可能になりました!

しかし、ビルド後のファイルを実行するとこんな結果に。。。。

# ./OpenCV 
カメラが見つかりませんでした

う〜ん、なんでやろ。。。

んで、解決へ

cvCreateCameraCaptureの引数を-1にしてたら適当なカメラを見つけてくれるはずなんやけども、見つけてくれてないみたいなので、0にしてみたら、うまく実行できた!

ちょっ〜と面白くなりそうな予感!