使用opencv了解相机捕获率

时间:2013-08-22 09:13:15

标签: opencv camera camera-calibration cameracapturetask

这可能是一个开放式问题。我编写了一个opencv应用程序,它从连接到计算机的两个外部摄像头捕获馈送。两台摄像机的捕获在两个不同的线程上并行运行。该记录器模块将帧写入稍后处理的视频文件。以下代码位于每个线程函数中:

    CvCapture *capture =cvCaptureFromCAM(indexOfCamera);
    if(!capture) return;

    CvSize sz =cvGetSize(cvQueryFrame(capture));
    cvNamedWindow("src");
    CvVideoWriter *writer =cvCreateVideoWriter((char*) p, CV_FOURCC('L','A','G','S'), 20, sz);
     if( !writer ) {
        cvReleaseCapture( &capture );
        return;
    }
     IplImage *frame;
     int frameCounter =0;
     while(true){
        QueryPerformanceCounter(&sideCamCounter);
        frame =cvQueryFrame(capture);
        if(!frame)break;
        //Store timestamp of frame somewhere
        cvShowImage("src", frame);
        cvWriteFrame(writer, frame);

        int c=cvWaitKey(1);
        if((char)c ==27)break;
        ++frameCounter;
     }
    cvReleaseVideoWriter(&writer);
    cvReleaseCapture(&capture);
    cvDestroyAllWindows();

我使用的两个相机是:A - 用于笔记本电脑的Microsoft hd-6000 lifecam和B - Logitech球体AF网络摄像头。摄像机A的拍摄速度约为16-20 fps(在几次录制时达到30 fps),摄像机B的拍摄速度约为10-12 fps。

我需要更快的捕获率才能捕获实时动作。我知道我将受到相机捕获速度/速率的限制,但除此之外,还有哪些因素会影响捕获率 - 例如加载到系统(内存和CPU),API使用?我愿意探索各种选择。感谢。

1 个答案:

答案 0 :(得分:1)

  1. 尝试设置不同的相机属性 - http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-set,可能最有趣的是... FPS :)请注意,它并不总是正常工作(How to set camera FPS in OpenCV? CV_CAP_PROP_FPS is a fake),但是给出这是一个机会,也许它会帮助你。您也可以尝试设置较小的图像分辨率。

  2. 如果您不需要 - 请勿显示图像。

  3. 您可以尝试在一个线程中抓取帧并在另一个线程中处理。
  4. 将相机直接连接到电脑 - 请勿使用USB集线器。
  5.   

    使用的API

  6. 我认为它不会有所帮助,但如果您愿意,可以尝试使用不同的API - OpenCV on Mac is not opening USB web camera