我想保存一些视频帧。我尝试在视觉CvsaveImage()
中使用C++ 2010
,但它无法保存很多帧,因为我不知道如何使用不同的名称保存下一帧。因此,旧框架将被下一个框架覆盖。
有人可以帮我保存许多不同名字的框架吗?
答案 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 );