내 동영상의 일부 프레임을 저장하고 싶습니다. 시각적으로 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 숯불 * 파일명 CONST의 CvArr * 화상 )' –
예를 들어 sprintf()를 사용할 수 있습니다. – cedrou
대단히 고마워요, 잘 작동합니다. –
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);
대단히 고마워요. :) –
사용을 카운터 또는 고유 생성 할 수있는 시스템 시간을 (및 정렬 가능) 파일 이름. 대답 덕분에 –
, 자세한 내용을 설명 할 수 있습니까? 대답 덕분에 –