2013-03-14 1 views
0

내 동영상의 일부 프레임을 저장하고 싶습니다. 시각적으로 C++ 2010에서 CvsaveImage()을 사용해 보았지만 다음 프레임을 다른 이름으로 저장하는 방법을 모르기 때문에 많은 프레임을 저장할 수 없습니다. 따라서 이전 프레임은 다음 프레임으로 덮어 쓰게됩니다.동영상의 프레임 저장 방법

누구나 다른 이름으로 많은 프레임을 저장할 수 있습니까?

+0

사용을 카운터 또는 고유 생성 할 수있는 시스템 시간을 (및 정렬 가능) 파일 이름. 대답 덕분에 –

+0

, 자세한 내용을 설명 할 수 있습니까? 대답 덕분에 –

답변

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 숯불 * 파일명 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

대단히 고마워요. :) –

관련 문제