我们在阅读图像相关的论文的时候看到论文里所用的视频,
我们在找到的时候,作者往往提供的是图片集,例如:
Bootstrap WavingTrees
因此我们有必要把图片转换成视频方便我们的使用,下面的代码可以轻松实现图片转视频
注:图片可以是bmp、jpg、png的,转换成的视频是avi格式
下面代码要运行的话需要opencv,哪个版本的应该都行。详细使用方法都
在代码注释里
#include <cv.h>
#include <highgui.h>
#include <iostream>
#include <string>
using namespace std;
//如下定义按照自己需求定义
#define VIDEO_WIDTH 160 //输入图片的宽
#define VIDEO_HEIGHT 120 //输入图片的高
#define START_FRAME 1 //起始图片
#define END_FRAME 3054 //终止图片,图片的总数
char* inputDir="E:\\ViBe\\测试视频\\Bootstrap\\"; //你要转换成视频的图片所在的路径
char* videoName="Bootstrap.avi"; //你要转换成的视频的名字 ,必须是avi格式的
char* outDir="E:\\ViBe\\测试视频\\"; //转换完的视频保存的路径
char* imageType = ".bmp"; //图片后缀可以是.jpg .bmp
int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame, int imgW,
int imgH,char* imgExt,double fps,int isColor,int fourcc);//图片序列转化为视频
int main(int argc, char** argv)
{
int frames=ImageToVideo(outDir,videoName,inputDir,START_FRAME,END_FRAME,
VIDEO_WIDTH,VIDEO_HEIGHT,imageType,24,1,CV_FOURCC('X','V','I','D'));
cout<<"total frames "<<frames<<" have been write to video."<<endl;
return 0;
}
//将图片序列转换为视频,返回视频帧数
int ImageToVideo(char* outDir,char* videoName,char* inputDir,int startFrame,int endFrame, int imgW,int imgH,
char* imgExt,double fps=24,int isColor=1,int fourcc=CV_FOURCC('X','V','I','D'))
{
char fullVideoName[512];//输出视频的完整文件名:路径+文件名
char imagePath[512];//表示所读取的图片的所在路径
char imageName[512];
CvVideoWriter *pWriter=NULL;
CvSize size=cvSize(imgW,imgH);
IplImage *pImg=NULL;
int frameCount=0;
int Count = 1;
strcpy_s(fullVideoName,"");
sprintf_s(fullVideoName,"%s%s",outDir,videoName);//将字符串outDir和videoName连接起来,打印,保存在fullVideoName中
pWriter=cvCreateVideoWriter(videoName,fourcc,fps,size,isColor);//CREATE WRITER
while(startFrame<=endFrame)
{
strcpy_s(imagePath,"");
sprintf_s(imageName,"%s%05d%s","b",Count,imgExt); //读入图片名 例如:b00001.bmp,05d指Count=1时,表示为00001,其他数字类似
//sprintf_s(imageName,"%05d%s",Count,".bmp");
Count++;
sprintf_s(imagePath,"%s%s",inputDir,imageName); //路径+文件名
printf("%s\n",imagePath);
pImg=cvLoadImage(imagePath,isColor);
if (!pImg)
{
cout<<"can't open an image file"<<endl;
return frameCount;
}
cvWriteFrame(pWriter,pImg);
cvWaitKey(1);
cout<<"Write frame "<<startFrame<<endl;
startFrame++;
cvReleaseImage(&pImg);
frameCount++;
}
cvReleaseVideoWriter(&pWriter);
rename(videoName,fullVideoName);//移动文件到指定文件夹
return frameCount;
}