Вероятно, это открытый вопрос. Я написал приложение 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 — веб-камера Logitechsphere AF. Камера А снимает со скоростью около 16-20 кадров в секунду (достигает до 30 кадров в секунду во время нескольких записей), а камера Б снимает со скоростью около 10-12 кадров в секунду.
Мне нужна более высокая скорость захвата, чтобы иметь возможность захватывать движение в реальном времени. Я понимаю, что буду ограничен скоростью/частотой захвата камеры, но помимо этого, какие другие факторы будут влиять на скорость захвата, например. нагрузка на систему (память и ЦП), используемый API? Я открыт для изучения вариантов. Спасибо.