MacBookで複数台のカメラを使ってみた
「OpenCV on MacBook で同時に2台の1394カメラを使ってみた.」
ちょっと同期したステレオ画像が欲しくなったので,OpenCVを使って複数台のカメラを使うプログラムを書いてみた.
サンプルプログラムの実行
とりあえず,1394カメラ使えんのか?と思って,2台のカメラをつないで,サンプルプログラムを動かしてみた.カメラを使うものならなんでも良いので,OpenCVのインストールパッケージにあったlkdemoを動かしてみた.
opencv-1.0.0/samples/c/lkdemo
実行すると片方のカメラの映像が出てきた.おー素晴らしい!なんかしらんが,なんもせんでも1394カメラが使えとるじゃんか!!
./configure
しても
Use dc1394 & raw1394: no
とか言われてんのに何故??
Use QuickTime / Mac OS X: yes
になってればいいのか?まぁ,とりあえず動いたので良しとする.詳しいことはあとで調べる.
サンプルプログラムを覗く
動いたので,さっそくlkdemo.cを参考に作ってみる.ソースを覗くと,こんな感じになってた.
CvCapture* capture = 0; if( argc==1 | (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 ); else if( argc==2 ) capture = cvCaptureFromAVI( argv[1] );
あー,引数でカメラ選択できるのね.aviファイルも入力できるのかぁーなるほど.とりあえず,cvCaptureFromCAMが使えそうなので,opencv.jpで調べてみる.が,無い.google code searchに聞いてみると,
#define cvCaptureFromCAM cvCreateCameraCapture
とか出てきた.なんだ,cvCreateCameraCaptureと一緒なのね.
プログラムを改造
とりあえず,なんとなく分かったので,書いてみる.
サンプルプログラムのカメラ選択部分を消して,
CvCapture *capture = 0; capture = cvCaptureFromCAM( 0 );
とシンプルに書き直してあげる.実行すればちゃんと片方のカメラの画像が出てくる.次に2台目のカメラを指定してみる.
CvCapture *capture = 0; capture = cvCaptureFromCAM( 1 );
実行すると,2台目のカメラの画像が,,,と思ったが,なぜかさっきと同じ1台目のカメラの画像が出てくる.むむむ?変だなー.調べてみると
OpenCV: MacbookでUSBカメラを使う - Cold Water
でも同じような事が書いてあった.参考にさせてもらって,
CvCapture *capture = 0; capture = cvCaptureFromCAM( 0 ); capture = cvCaptureFromCAM( 1 );
とすると,お!2台目のカメラの画像が出てきた!ありがとうcoldwaterさん!
2台のカメラを同時に読み込む
で,2台同時に取り込むために,こうやって書いてあげる.
CvCapture *capture1 = 0; CvCapture *capture2 = 0; capture1 = cvCaptureFromCAM( 0 ); capture2 = cvCaptureFromCAM( 0 ); capture2 = cvCaptureFromCAM( 1 );
結果はダメ.これだと1394カメラとiSightになる.1394の2台目が飛ばされてる??ははーん,ということで,やっぱりこれでいけることが判明.
CvCapture *capture1 = 0; CvCapture *capture2 = 0; capture1 = cvCaptureFromCAM( 0 ); capture2 = cvCaptureFromCAM( 1 );
ってか,これでもいける.
CvCapture *capture1 = 0; CvCapture *capture2 = 0; capture1 = cvCaptureFromCAM( 0 ); capture2 = cvCaptureFromCAM( 0 );
もはやcvCaptureFromCAMの引数のindexに意味ない.順々に読み込んでいるだけということが分かった.
1394 CAM->iSight->USB CAM
の順なのかな.MacBook内蔵のiSightってたしかUSBだから,後ろの順番はどうなるか分からんけども.