这可能是一个开放式问题。我编写了一个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使用?我愿意探索各种选择。感谢。
答案 0 :(得分: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),但是给出这是一个机会,也许它会帮助你。您也可以尝试设置较小的图像分辨率。
如果您不需要 - 请勿显示图像。
使用的API
我认为它不会有所帮助,但如果您愿意,可以尝试使用不同的API - OpenCV on Mac is not opening USB web camera