Понимание скорости захвата камеры с помощью opencv

Вероятно, это открытый вопрос. Я написал приложение 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? Я открыт для изучения вариантов. Спасибо.


person Hrishikesh_Pardeshi    schedule 22.08.2013    source источник


Ответы (1)


  1. Попробуйте установить разные свойства камеры — http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#videocapture-set, пожалуй, самым интересным для вас будет... FPS :) Учтите, что не всегда работает нормально ( Как установить FPS камеры в OpenCV? CV_CAP_PROP_FPS - это подделка ), но дайте ему шанс, возможно, он вам поможет. Также вы можете попробовать установить меньшее разрешение изображения.

  2. Если вам не нужно - не отображайте изображение.

  3. Вы можете попытаться захватить кадры в одном потоке и обработать в другом.
  4. Подключайте камеры напрямую к компьютеру — не используйте концентратор USB.
  5. #P3#

Я не думаю, что это поможет, но если вы хотите, вы можете попробовать использовать другой API - OpenCV на Mac не открывает веб-камеру USB

person cyriel    schedule 22.08.2013
comment
Спасибо за помощь. Я перепробовал все, но ни один из них не сильно влияет на скорость захвата. - person Hrishikesh_Pardeshi; 23.08.2013