在进行面部检测时,OpenCV缺少帧

时间:2013-12-02 10:23:14

标签: c++ visual-studio-2010 opencv

我正在使用

    haarcascade_frontalface_alt2.xml

在Visual Studio 10框架下的OpenCV 2.4.3中进行面部检测的文件。 我正在使用

    Mat frame;
    cv::VideoCapture capture("C:\\Users\\Xavier\\Desktop\\AVI\\Video 6_xvid.avi");
capture.set(CV_CAP_PROP_FPS,30);
    for(;;)
{

    capture >> frame;
     //face detection code
    }

我面临的问题是,由于Haar人脸检测计算量很大,OpenCV在

中缺少几帧
    capture >> frame;

指令。为了检查它,我写了一个txt文件计数器,发现900秒中只有728帧30秒30fps视频。 有人告诉我如何解决它。

1 个答案:

答案 0 :(得分:0)

我不是一位经验丰富的openCV用户,但您可以尝试将捕获的输出流刷新到磁盘。不幸的是,我认为VideoCapture类似乎不支持这样的操作。请注意,刷新到磁盘会对性能产生影响,因为它将首先刷新所有内容,然后才继续执行。因此,它可能不是最佳解决方案,但如果可能的话,它是最简单的解决方案。

另一种需要更多工作但需要解决的方法是创建一个单独的低优先级线程,将每个帧写入磁盘。您当前的线程只需要在每次希望捕获其数据时调用此低优先级线程。根据优先级较高的线程是否可能更改数据而低优先级线程仍需将其写入磁盘,您可能需要先将数据复制到单独的缓冲区。