0

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

    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 sphere AF 网络摄像头。相机 A 以 16-20 fps 左右的速度拍摄(在几次录制期间达到 30 fps),相机 B 以 10-12 fps 左右的速度拍摄。

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

4

1 回答 1

1
  1. 尝试设置不同的相机属性 - http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-set,对你来说最有趣的可能是...... FPS :) 请注意,它并不总是工作正常(如何在 OpenCV 中设置相机 FPS?CV_CAP_PROP_FPS 是假的),但给它一个机会,也许它会帮助你。您也可以尝试设置更小的图像分辨率。

  2. 如果你不需要 - 不要显示图像。

  3. 您可以尝试在一个线程中抓取帧并在另一个线程中处理。
  4. 将相机直接连接到您的计算机 - 不要使用 USB 集线器。
  5. 使用的 API

我认为这不会有帮助,但如果你愿意,你可以尝试使用不同的 API - Mac 上的 OpenCV 没有打开 USB 网络摄像头

于 2013-08-22T23:17:51.767 回答