2014-06-30 167 views
-1

在人脸跟踪系统上工作,并与OpenCV有问题。OpenCV - 摄像头分辨率

如果我实例化捕获并调用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

它看起来像你正在为每个帧实例化一个新的捕获。显示帧的正确方法是将其初始化一次,然后在while循环或for循环中查询帧。捕获属性只需设置一次 –

+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,这基本上是最小的人脸检测大小

相关问题