如何保存视频的任何帧



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

谁能帮我保存许多不同名称的帧?

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

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

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 );

相关内容

  • 没有找到相关文章

最新更新