3

我正在捕获一个 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 上运行它。

任何建议或意见表示赞赏。提前致谢

4

2 回答 2

2

我使用的解决方案由@GB 作为评论发布。我正在创建一个解决方案,以便将其标记为一个。

我使用capture.get(CV_CAP_PROP_POS_FRAMES)了之前和之后的帧抓取,如果“after”的值小于“before”的值,那么我已经到了视频的结尾。

于 2014-11-05T15:33:18.423 回答
1

获取如下所示的帧数,

int frameCnt = capture.get(CV_CAP_PROP_FRAME_COUNT);

并在帧数超过时检查退出循环..

于 2014-11-05T07:23:37.200 回答