如何保存视频的任何帧

时间:2013-03-14 15:39:06

标签: c++ opencv save-image

我想保存一些视频帧。我尝试在视觉CvsaveImage()中使用C++ 2010,但它无法保存很多帧,因为我不知道如何使用不同的名称保存下一帧。因此,旧框架将被下一个框架覆盖。

有人可以帮我保存许多不同名字的框架吗?

2 个答案:

答案 0 :(得分:0)

使用计数器,例如每次保存新文件时增加的帧编号或整数。在您的文件名末尾附加此计数器的值,您将获得一个唯一的文件名,直到计数器溢出(无符号整数超过40亿帧)。

static unsigned int counter = 0;
[...]
char pFileName[MAX_PATH] = {0};
sprintf(pFileName, "<YourFilePath>\\Frame_%u.jpg", counter++);
[...]

答案 1 :(得分:0)

cvSaveImage()需要const char* filename,但这意味着cvSaveImage不会更改字符串;它并不意味着无法改变它。

如果它更简单,你可以用你自己的函数包装cvSaveImage并在那里形成文件名:

int my_cvSaveImage( const char* baseFilename, int frameNumber, const CvArr* image )
{
    char filename[MAX_PATH] = {};
    sprintf( filename, "%s-%d.jpg", baseFilename, frameNumber );
    return cvSaveImage( filename, image );
}

现在你打电话:

my_cvSaveImage( "file", 1, image );
//...
my_cvSaveImage( "file", 2, image );