我想保存一段視頻。我嘗試在視覺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