OpenCV---图片生成视频

/**
	It is a batch processing interface.
*/
#include "stdafx.h"
#include <windows.h>
#include <Shlwapi.h>
#include <iostream>
#include <string>
#include <vector>
#include <opencv.hpp>
#pragma comment(lib,"shlwapi.lib")					//注意放置的位置
using namespace std;
using namespace cv;

/******************************************
	func:findfile
	decs:find all file name in a directory

	@param dir the aerial image set directory
	@param fileset image file name set in the 'dir'
	
	@return null
******************************************/
void findFile(string dir,vector<string> &fileset)
{
	WIN32_FIND_DATAA stFD ;							//存放文件信息的结构体
	HANDLE h;
	string temp;

	temp=dir+"\*";
	h=FindFirstFileA(temp.c_str(),&stFD);			//构建文件夹句柄

	while(FindNextFileA(h,&stFD))						//提取文件夹句柄相应文件夹所包括的文件
	{
		temp=dir+"\"+stFD.cFileName;

		if(temp==dir+"\..")										//上一级路径
		{
			continue;
		}
		else if(PathIsDirectoryA(temp.c_str()) )		//包括子文件夹
		{
			findFile(temp,fileset);									//递归调用
		}
		else
		{
			//cout<<stFD.cFileName<<endl;				//打印文件名称
			fileset.push_back(stFD.cFileName);
		}
	}

	return ;
}

/******************************************
	func:make_video
	decs:generate video based on image set

	@param dir the image set path
	@param videoPath video path 
	@param frameRate frame rate

	@param return null
******************************************/
void make_video(string dir, string videoPath,int frameRate)
{
	vector<string> fileset;
    Size frameSize;
	VideoWriter writer; 
	
	findFile(dir,fileset);

	vector<string>::iterator it=fileset.begin();
	string filename;

	while(it!=fileset.end())
	{
		cout<<"---------------------------------------------"<<endl;
		filename=dir+*it;
		cout<<filename<<endl;
		it++;

		Mat frame;  
        frame = imread(filename);    // 读入图片  
        if (!writer.isOpened())  
            {  
                frameSize.width  = frame.cols;  
                frameSize.height = frame.rows;  
      
                if (!writer.open("matching_video.avi", CV_FOURCC('D','I','V','X') , frameRate, frameSize, true))  
                {  
                    cout << "open writer error..." << endl;  
                    return -1;  
                }  
            }  
         // 将图片数据写入  
         writer.write(frame);    
         // 显示  
         imshow("video", frame);  
         waitKey(frameRate);
	}

	return;
}

int main(void)
{
	string dir,videoPath;
	int frameRate;

	//dir=".\shan_xi_aerial\";
	//dir="E:\pic\shan_xi_aerial\";
	dir="D:\我的文档\Documents\Visual Studio 2010\Projects\speed_sift\speed_sift\result\";
	videoPath="matching_video.avi";
	frameRate=25;
	make_video(dir,videoPath,frameRate);

	cout<<"Generate video ""<<videoPath<<"" OK!!!"<<endl;
	system("pause");
	return 0;
}

原文地址:https://www.cnblogs.com/lcchuguo/p/5195255.html