0

我有一个 cvMat 类型的向量,我一直在其中存储从计算机网络摄像头获取的帧。存储 100 帧后,我想回放这些帧。如果记录是我的 cvMats 向量,我认为可以这样做:

cvNamedWindow("play-back",CV_WINDOW_AUTOSIZE);
cvMoveWindow("play-back",100,100);
for (vector<Mat>::iterator iter = record.begin(); iter != record.end();++iter) {
   imshow("play-back",*iter);
}

执行时,该程序似乎可以很好地存储 cvMat 并从网络摄像头获取输入,但是当我尝试播放时,该程序似乎非常快速地执行那部分代码——事实上,如此之快,以至于我没有时间欣赏结果。我怎样才能改进这段代码,使播放不那么匆忙?

4

1 回答 1

3

您需要控制 OpenCV 以实际渲染窗口中的每个图像,并在切换到下一个之前将其保持一小段时间。您应该添加对cvWaitKey的调用, 延迟时间为 41 毫秒(大约 24 fps)。然后您可以检查 cvWaitKey 的返回值,以便用户可以停止播放。像这样的东西:

cvNamedWindow("play-back",CV_WINDOW_AUTOSIZE);
cvMoveWindow("play-back",100,100);
for (vector<Mat>::iterator iter = record.begin(); iter != record.end();++iter) {
   imshow("play-back",*iter);
   if( cvWaitKey(41) == 27 ) // ESC
       break;
}
于 2012-12-29T17:29:59.180 回答