我想保存视频中的一些帧。我尝试在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 );