2013-03-14 6 views
0

Я хочу сохранить кадр моего видео. Я пытаюсь использовать CvsaveImage() в visual C++ 2010, но он не может сэкономить много кадров, потому что я не знаю, как сохранить следующий кадр с другим именем. Таким образом, старый кадр будет перезаписан следующим.Как сохранить любой кадр видео

Может ли кто-нибудь помочь мне сэкономить много кадров с другим именем?

+0

Используйте счетчик или системы времени, чтобы генерировать уникальный (и сортируемые) имена файлов. –

+0

спасибо, вы можете объяснить более подробно? –

ответ

0

Используйте счетчик, например номер кадра или целое число, которое вы увеличиваете каждый раз при сохранении нового файла. Добавьте значение этого счетчика в конце вашего имени файла, и вы получите уникальное имя файла, пока счетчик не переполнится (более 4 миллиардов кадров для целого числа без знака).

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

спасибо, я могу понять это. но проблема заключается в том, чтобы добавить значение счетчика, так как в 'cvsaveImage()', имя файла является константным * символ: 'INT cvSaveImage ( Const символ * имя_файла, Const CvArr * изображение );' –

+0

Например, вы можете использовать sprintf(). – cedrou

+0

Большое спасибо, он отлично работает. –

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

спасибо вам большое, это работает :) –

Смежные вопросы