这可能是一个开放式问题。我编写了一个 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?我愿意探索选项。谢谢。