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にしています.

大学時代にやった事を,再度やってみただけだけどね...(汗