C++ OpenCV cvMAT Playback

C++ OpenCV cvMAT Playback

本文关键字:Playback cvMAT OpenCV C++      更新时间:2023-10-16

我有一个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);
}

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

你需要给OpenCV控制权来实际渲染窗口中的每个图像,并在切换到下一个之前保持一小段时间。您应该添加对cvWaitKey的调用,延迟为41ms(大约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;
}