opencv 图片转视频

我们在阅读图像相关的论文的时候看到论文里所用的视频,

我们在找到的时候,作者往往提供的是图片集,例如:

                                      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;
}


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值