OpenCV捕获循环视频/不检测最后一帧

时间:2012-12-10 10:10:43

标签: c++ eclipse macos opencv

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

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

2 个答案:

答案 0 :(得分:2)

我使用的解决方案是由@G B发布的。我正在创建一个解决方案,以便将其标记为一个。

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

答案 1 :(得分:1)

获取如下的帧数,

int frameCnt = capture.get(CV_CAP_PROP_FRAME_COUNT);

当帧数超过时,检查退出循环..