2013-03-14 118 views
0

我想保存一段視頻。我嘗試在視覺C++ 2010中使用CvsaveImage(),但它無法保存很多幀,因爲我不知道如何使用不同的名稱保存下一幀。所以,舊的框架將被下一個覆蓋。如何保存視頻的任何幀

任何人都可以幫我保存很多不同名稱的幀嗎?

+0

使用計數器或系統時間生成唯一的(和可排序的)文件名。 – 2013-03-14 15:48:41

+0

感謝您的回答,您能解釋更多細節嗎? – 2013-03-15 17:42:17

回答

0

使用計數器,例如每次保存新文件時增加的幀數或整數。在文件名的末尾附加這個計數器的值,你會得到一個唯一的文件名,直到計數器溢出爲止(一個無符號整數超過40億幀)。

static unsigned int counter = 0; 
[...] 
char pFileName[MAX_PATH] = {0}; 
sprintf(pFileName, "<YourFilePath>\\Frame_%u.jpg", counter++); 
[...] 
+0

感謝回答,我可以弄明白。但問題是,如何添加計數器的值,因爲在'cvsaveImage()',文件名是一個const *字符: 'INT cvSaveImage( 爲const char *文件名, 常量CvArr *圖像 );' – 2013-03-15 17:17:53

+0

例如,您可以使用sprintf()。 – cedrou 2013-03-15 17:22:13

+0

非常感謝你,它工作正常。 – 2013-03-16 08:04:36

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); 
+0

非常感謝你,它的工作:) – 2013-03-16 07:57:25