我正在捕获avi文件并进行处理。我的代码已经工作了一段时间没有问题,但现在它似乎没有停止在视频的最后一帧被捕获后。相反,它会循环回到视频的开头。我不明白为什么会这样,我想不出有关Eclipse或OpenCV的任何变化。我在我的Ubuntu电脑上尝试使用相同的视频相同的代码,它没有问题。我甚至尝试过重新安装操作系统和应用程序,但没有成功。
示例代码:
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main(int argc, char** argv)
{
Mat frame;
VideoCapture capture;
const string inputVideo = argv[1];
char buff[PATH_MAX];
getcwd( buff, PATH_MAX );
std::string fileName( buff );
fileName.append("/");
fileName.append(inputVideo);
capture.open(inputVideo);
while(true)
{
capture >> frame;
if(!frame.empty())
{
imshow("frame", frame);
}
else
{
printf(" --(!) No captured frame -- Break!");
break;
}
int key = waitKey(10);
if((char)key == 'c')
{
break;
}
}
return 0;
}
我在Mac OS X(10.8.2),Eclipse Juno和OpenCV 2.4.3上运行。
任何建议或意见表示赞赏。提前致谢
答案 0 :(得分:2)
我使用的解决方案是由@G B发布的。我正在创建一个解决方案,以便将其标记为一个。
我在抓取帧之前和之后使用capture.get(CV_CAP_PROP_POS_FRAMES)
,如果值“after”小于“之前”的值,那么我已经到达了视频的末尾。
答案 1 :(得分:1)
获取如下的帧数,
int frameCnt = capture.get(CV_CAP_PROP_FRAME_COUNT);
当帧数超过时,检查退出循环..