0

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

任何人都可以帮我保存许多不同名称的框架吗?

4

2 回答 2

0

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

static unsigned int counter = 0;
[...]
char pFileName[MAX_PATH] = {0};
sprintf(pFileName, "<YourFilePath>\\Frame_%u.jpg", counter++);
[...]
于 2013-03-14T21:17:59.030 回答
0

cvSaveImage()需要 a 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 );
于 2013-03-15T17:47:09.383 回答