Высокая скорость захвата видео с OpenCV и PlayStation Eye - PullRequest
5 голосов
/ 16 сентября 2011

Я работаю над проектом, который требует низкого разрешения и около 110 кадров в секунду. Поэтому я купил 30 $ PlayStation eye, который обеспечивает 120 кадров в секунду в 320 в разрешении 240.

Я установил предыдущую версию Macam (потому что последняя версия не работала) и успешно получил около 120 кадров в секунду (но я не могу записать из-за некоторых ошибок в Macam).

enter image description here

Я написал простой код для сохранения каждого кадра в виде файла jpg:

 #include <stdio.h>
 #include "cv.h"
 #include "highgui.h"
 #include<iostream>
 using namespace std;

 int main(int argc, char** argv) {

     int i = 0;
     char *buf;
     IplImage *frame;
     CvCapture* capture = cvCreateCameraCapture(3);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 320);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 240);
     cvSetCaptureProperty( capture, CV_CAP_PROP_FPS, 110);

     while (true) {

         frame = cvQueryFrame(capture);
         asprintf(&buf, "%d.jpg", i++);
         cvShowImage("1", frame);
         cvSaveImage(buf, frame);
         cvWaitKey(10);
     }
     return 0;
 }

но это только экономит 30 кадров в секунду. Я имею в виду, что он создает 30 файлов вместо 110 файлов в секунду. В чем проблема?

Обновление: Я скомпилировал приведенный выше код, используя следующую команду:

g++ main.cpp `pkg-config --cflags opencv` `pkg-config --libs opencv` -o exec -m32

1 Ответ

1 голос
/ 16 сентября 2011

cvWaitKey(10); ожидает 10 мс.

Частота кадров 110 Гц требует снимка каждые 9 мс, плюс время обработки для сохранения кадра.

Так что проблема здесь, в дополнение к CV_CAP_PROP_FPS не работает должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...