Понимание скорости захвата камеры с помощью OpenCV
Это, вероятно, открытый вопрос. Я написал приложение 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 сфера AF камера. Камера A снимает со скоростью около 16-20 кадров в секунду (достигает нескольких кадров в секунду во время нескольких записей), а камера B снимает со скоростью около 10-12 кадров в секунду.
Мне нужна более высокая скорость захвата, чтобы иметь возможность захватывать движения в реальном времени. Я понимаю, что я буду ограничен скоростью / скоростью захвата камеры, но помимо этого, какие другие факторы будут влиять на скорость захвата - например, нагрузка на систему (память и процессор), используемый API? Я открыт для изучения вариантов. Благодарю.
1 ответ
Попробуйте установить разные свойства камеры - http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html, вероятно, наиболее интересными для вас будут... FPS:) Обратите внимание, что это не всегда работает нормально ( Как настроить FPS камеры в OpenCV? CV_CAP_PROP_FPS - подделка), но дайте ему шанс, может быть, это поможет вам. Также вы можете попытаться установить меньшее разрешение изображения.
Если вам не нужно - не показывайте изображение.
- Вы можете попытаться захватить кадры в одном потоке и обработать в другом.
- Подключайте камеры напрямую к компьютеру - не используйте USB-концентратор.
API используется
Я не думаю, что это поможет, но если вы хотите, вы можете попробовать использовать другой API - OpenCV на Mac не открывает веб-камеру USB