2014-06-30 2 views
-1

работает на системе слежения за лицом и имеет проблемы с OpenCV.OpenCV - разрешение камеры

Если я создаю экземпляр Capture и вызываю QueryFrame(), я получаю разрешение изображения 640x480. Все шелковистое.

_grabber = new Capture(); 
_grabber.QueryFrame(); 

Однако, если я попытаюсь увеличить разрешение, скажем, что 800x600 fps резко уменьшится.

_grabber = new Capture(); 
_grabber.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_FRAME_HEIGHT, LiveFeedSize.Height); 
_grabber.SetCaptureProperty(CAP_PROP.CV_CAP_PROP_FRAME_WIDTH, LiveFeedSize.Width); 
_grabber.QueryFrame(); 

Я устанавливаю ширину/высоту перед каждым QueryFrame().

У кого есть идеи по увеличению кадров в секунду? Спасибо

+0

Похоже, вы создаете новый Capture для каждого кадра. Правильный способ отображения кадров - создать экземпляр его один раз, а затем в цикле while или for-loop запросить фреймы. Свойства захвата нужно установить только один раз –

+0

Вы можете попробовать установить частоту кадров камеры через CV_CAP_PROP_FPS. Тем не менее, чтобы сохранить полосы пропускания, вы делаете поток с меньшей скоростью при увеличении разрешения. – Drodbar

+0

Привет, Erik, я создаю экземпляр только в начале - я просто устанавливаю ширину/высоту перед каждым QueryFrame() - если я устанавливаю ширину/высоту при запуске, значения не сохраняются. Привет, Drodbar, так может случиться так, Изменение FPS при изменении ширины/высоты? – Ivan

ответ

0

поэтому после долгой ночи я нахожу решение проблемы. Камера сам по себе способна работать с полным разрешением, однако, проблема была в этой строке кода

MCvAvgComp[][] facesDetected = _gray.DetectHaarCascade(_face, 1.2, 10, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(150, 150)); 

, где последний параметр размера был мал (27 * 27), так что занимает значительное количество времени, чтобы вычислить. Решение заключалось в том, чтобы увеличить значение до 150, которое в основном минимально определено граничным размером

Смежные вопросы