昨晚无意看到stackoverflow上一个人提问,说如何读取图像倒序,我心血来潮,就想了下,写的很搓,很简单的。
思路:
从图像的最后一帧开始读取, 依次向前一帧递减,直当前帧为0.
code :
// Author W.Qi
// Data 16/4/2013
// How to read the image in reverse.
#if !defined VK_ESCAPE
#define VK_ESCAPE 0x1B // Escape character (27)
#endif
int main()
{
VideoCapture cap("video.avi");
cap.set(CV_CAP_PROP_POS_AVI_RATIO,1); % 1表示 the end of frames
int number_of_frames=cap.get(CV_CAP_PROP_POS_FRAMES); % 获得图像的frames
Mat frame;
namedWindow("window");
while(number_of_frames>0)
{
number_of_frames--;
cap.set(CV_CAP_PROP_POS_FRAMES,number_of_frames); %设置从哪一帧开始读取
cap>>frame;
if( frame.empty() ) {
cerr << "ERROR: Couldn't grab the next camera frame." << endl;
exit(1);
}
imshow("window",frame);
char cc=waitKey(33);
if(cc==VK_ESCAPE)
{
break;
}
}
return 0;
}
另外,对于视频的编码好像有要求的,我试了试我的红外视频貌似不可以读的,可能因为编码问题, 然后换了opencv自带的视频,可以读了。具体什么原因我也不是很清晰的了。如果大家知道了可以告诉我下, 先谢谢拉~~~~~写的很搓。大家见谅。。。。。