2014年6月25日水曜日

ラズベリーパイ+opencvでUSBカメラ接続


ラズベリーパイにUSBカメラをつないでopencvで画像処理ができないかトライ中。
使用したカメラはUSBなんでもマイクロスコープ。
割と小さいものが見たかったのでこれを選択。
ただ、それなりに近づけないといけないので、1万円以内でcマウントのレンズ付けれてラズパイで認識してくれるものがあるとよいのだが、探し中。。


まずは他のブログで紹介されているソースを参考にプログラム。

---------------------------------------------------------------------------------------
#include <cv.h>
#include <highgui.h>
#include<stdio.h>
using namespace cv;
int main (int argc, char **argv)
{
double width;  
double height;
CvCapture *capture = NULL;IplImage *frame = 0;

int ch;

capture = cvCreateCameraCapture(-1);width = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH);
height = cvGetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT);

  //  width=320;height=240;

  //   width=160;height=120;

  cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH,width);
  cvSetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT,height);
  while (1) {  frame = cvQueryFrame (capture);
  cvShowImage ("Capture", frame);
  ch = cvWaitKey ( 1.0 );

          if (ch == '\x1b') {
          break;
          }
   
    fprintf( stderr, "width = %f, height = %f, fps = %f\n", width, height, fps );
//stderr = standrd errer output

   }
  cvReleaseCapture (&capture);
  cvDestroyWindow ("Capture");
  return 0;
}
------------------------------------------------------------------
実行コマンド

 g++ -o a.out camera.c -I/usr/include/opencv2 -I/usr/include/opencv -L/usr/lib  -lopencv_imgproc -lopencv_highgui -lopencv_core

 ---------------------------------------------------------------------
フレームの幅、高さを特に指定せずに実行すると、(640,480)になる。
一応動くが、早い動作にはついていけない。

cvSetCaptureProperty でフレーム幅・高さを小さくするとそれなりに早くなるけど、表示ウインドウが小さくなって見にくい。。う~ん。

 ラズベリーパイの処理能力の問題かと思ったが、guvcviewなら特に遅延なく動くので、
opencvのプログラムの問題なのか??
それなりに追従性はほしいのだが、画像処理に行く前の時点でつまずき気味。。。







0 件のコメント:

コメントを投稿