Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何保存视频的任何帧_C++_Opencv_Save Image - Fatal编程技术网

C++ 如何保存视频的任何帧

C++ 如何保存视频的任何帧,c++,opencv,save-image,C++,Opencv,Save Image,我想保存一些视频帧。我尝试在visualC++2010中使用CvsaveImage(),但它无法保存许多帧,因为我不知道如何用不同的名称保存下一帧。因此,旧帧将被下一帧覆盖 有人能帮我保存许多不同名称的帧吗?使用计数器,例如帧编号或每次保存新文件时递增的整数。将此计数器的值附加到文件名的末尾,您将得到一个唯一的文件名,直到计数器溢出(对于无符号整数,超过40亿帧) 静态无符号整数计数器=0; [...] char pFileName[MAX_PATH]={0}; sprintf(pFileNam

我想保存一些视频帧。我尝试在visual
C++2010
中使用
CvsaveImage()
,但它无法保存许多帧,因为我不知道如何用不同的名称保存下一帧。因此,旧帧将被下一帧覆盖


有人能帮我保存许多不同名称的帧吗?

使用计数器,例如帧编号或每次保存新文件时递增的整数。将此计数器的值附加到文件名的末尾,您将得到一个唯一的文件名,直到计数器溢出(对于无符号整数,超过40亿帧)

静态无符号整数计数器=0;
[...]
char pFileName[MAX_PATH]={0};
sprintf(pFileName,\\Frame_u%u.jpg),计数器++);
[...]
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 );

使用计数器或系统时间生成唯一的(可排序的)文件名。多亏了回答,你能解释更多细节吗?多亏了回答,我能猜出来。但问题是如何附加计数器的值,因为在
cvsaveImage()
中,文件名是const*char:
int-cvsaveImage(const-char*filename,const-CvArr*image)例如,可以使用sprintf()。
my_cvSaveImage( "file", 1, image );
//...
my_cvSaveImage( "file", 2, image );