我想保存一段视频。我尝试在视觉C++ 2010
中使用CvsaveImage()
,但它无法保存很多帧,因为我不知道如何使用不同的名称保存下一帧。所以,旧的框架将被下一个覆盖。如何保存视频的任何帧
任何人都可以帮我保存很多不同名称的帧吗?
我想保存一段视频。我尝试在视觉C++ 2010
中使用CvsaveImage()
,但它无法保存很多帧,因为我不知道如何使用不同的名称保存下一帧。所以,旧的框架将被下一个覆盖。如何保存视频的任何帧
任何人都可以帮我保存很多不同名称的帧吗?
使用计数器,例如每次保存新文件时增加的帧数或整数。在文件名的末尾附加这个计数器的值,你会得到一个唯一的文件名,直到计数器溢出为止(一个无符号整数超过40亿帧)。
static unsigned int counter = 0;
[...]
char pFileName[MAX_PATH] = {0};
sprintf(pFileName, "<YourFilePath>\\Frame_%u.jpg", counter++);
[...]
感谢回答,我可以弄明白。但问题是,如何添加计数器的值,因为在'cvsaveImage()',文件名是一个const *字符: 'INT cvSaveImage( 为const char *文件名, 常量CvArr *图像 );' – 2013-03-15 17:17:53
例如,您可以使用sprintf()。 – cedrou 2013-03-15 17:22:13
非常感谢你,它工作正常。 – 2013-03-16 08:04:36
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);
非常感谢你,它的工作:) – 2013-03-16 07:57:25
使用计数器或系统时间生成唯一的(和可排序的)文件名。 – 2013-03-14 15:48:41
感谢您的回答,您能解释更多细节吗? – 2013-03-15 17:42:17