IntelMacでOpenCVを用いてVideoCaptureをした方法をしるします.
環境について
* iMac 20inch
* 2.4GHz Intel Core 2 Duo
* 1GBメモリ
* 320GB ハードディスクドライブ1
* 8倍速 2層式SuperDrive
* ATI Radeon HD 2600 PROグラフィックプロセッサ (256MBメモリ)
ライブラリーが足りないので,finkを使ってインストールする.
fink install pkgconfig fink install libjpeg fink install libpng3 fink install libtiff
これで,前準備は完了.
次は,OpenCVをダウンロードしてくる.OpenCV
中頃にある,緑のボタンDownload Open Computer Vision Libraryをクリックして,opencv-linuxをダウンロード
ダウンロードしたら解答して,コンパイルにインストール
$ tar xzf opencv-1.0.0.tar.gz $ cd opencv-1.0.0 $ ./configure --with-python LDFLAGS=-L/sw/lib CPPFLAGS=-I/sw/include $ make $ sudo make install
これでひとまず終了.次にせっかくなのでサンプルのコンパイル
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig $ cd samples/c $ sh build_all.sh
これで,sample/cの中にあるプログラムを実行する事が出来る.
./facedetect
とかね.
でも,単純にビデオキャプチャーするだけのソースが欲しかったのでつくりました.
#include <stdio.h> #include <cv.h> #include <highgui.h> int main() { //cvCaptureFromCAMでキャプチャ用のCvCaptureへのポインタを取得 //引数はカメラ番号 CvCapture *capture = cvCaptureFromCAM(CV_CAP_ANY); IplImage *img ,*img_h; int keyInput; if(!capture){ fprintf(stderr,"Capture failed\n"); return 1; } cvNamedWindow("Capture",CV_WINDOW_AUTOSIZE); //640x480にリサイズして表示するためのIpImage img=cvQueryFrame(capture); img_h = cvCreateImage(cvSize(img->width/2,img->height/2),IPL_DEPTH_8U,3); //cvcamでのコールバックの代わりに無限ループを回す for(;;){ //フレーム画像を取得 img=cvQueryFrame(capture); if(!img){ break; } //640x480でキャプチャーするためにリサイズ cvResize(img,img_h,CV_INTER_CUBIC); //画像の出力 cvShowImage("Capture",img_h); //10msのウェイトをかけてキー入力を監視 keyInput=cvWaitKey(1); //ESCキーでループを終了 if((keyInput&255)==27){ break; } } //後片付け cvReleaseCapture(&capture); cvDestroyWindow("main window"); return 0; }
で,これを
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig $ gcc -ggdb `pkg-config --cflags opencv` -o capture capture.c `pkg-config --libs opencv`
でコンパイルできます.
何か新しいiMacについているiSightは,解像度が1280×1024なので,普通にキャプチャーすると,
画面がキャプチャー画面で埋まってしまいます.
そこで,
cvResize(img,img_h,CV_INTER_CUBIC);
をして,解像度を640x512にしています.
大学時代にやった事を,再度やってみただけだけどね...(汗