C ++ OpenCV cvMAT播放

时间:2012-12-29 17:23:06

标签: c++ opencv

我有一个cvMat类型的向量,我一直在存储从我的计算机的网络摄像头中取出的帧。存储100帧后,我想回放帧。如果record是我的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);
}

执行时,程序似乎运行良好,可以存储cvMats并从网络摄像头获取输入,但是当我尝试播放时,程序似乎很快就执行了那部分代码 - 事实上很快,我没有时间欣赏结果。我怎样才能改进这段代码,以便播放不那么匆忙?

1 个答案:

答案 0 :(得分: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;
}