2009年6月5日金曜日

OpenCVその4

さて、今日は2台のカメラから同時にキャプチャーできるようにする。ステレオ法による三次元計測ではどうしても必要なので・・・

単純に、カメラ関係の引数やら関数を2つに増やしてビルド・実行。
-----
#include
#include
int main( int argc, char** argv ){
  int key; CvCapture *capture1, *capture2;
  IplImage *frameImage1, *frameImage2;
  char windowNameCapture1[] = "Capture1";
  char windowNameCapture2[] = "Capture2";
  if((capture1 = cvCreateCameraCapture(0)) == NULL ){
    printf( "カメラ1が見つかりません\n" );
    return -1;
  }
  if((capture2 = cvCreateCameraCapture(1)) == NULL ){
    printf( "カメラ2が見つかりません\n" );
    return -1;
  }
  cvNamedWindow( windowNameCapture1, CV_WINDOW_AUTOSIZE );
  cvNamedWindow( windowNameCapture2, CV_WINDOW_AUTOSIZE );
  while( 1 ){
    frameImage1 = cvQueryFrame( capture1 );
    frameImage2 = cvQueryFrame( capture2 );
    cvShowImage( windowNameCapture1, frameImage1 );
    cvShowImage( windowNameCapture2, frameImage2 );
    key = cvWaitKey( 1 );
    if( key == 'q' ){ break; }
  }
  cvReleaseCapture( &capture1 );
  cvReleaseCapture( &capture2 );
  cvDestroyWindow( windowNameCapture1 );
  cvDestroyWindow( windowNameCapture2 );
  return 0;
}
-----
あっけなく実行可能。


以前、Let's Noteでやったときは2台目が全く動かなかったのでDirectShowを駆使してなんとか映しだしたのだが・・・。コンピュータによるのだろうか?研究用に購入したPCがこれまでになく調子がいい。○○工房さんの店長さんにボードなどの相性について相談に乗ってもらったのがよかったのかも。



ちなみに、写らない人は、USBボードやUSBカードを別途用意してUSBコントローラを分けるとうまくいくようです(本人確認)。USBの口が4つあってもネットワークのHUBのようなもので、制御しているところが1つになり2台を同時に制御してくれないようです。



さて、次はIEEEのカメラだな。

0 件のコメント:

コメントを投稿