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

  • 相关阅读:
    【公告】对乐逍遥和王者之剑利用破解程序插入刷流量广告处理结果
    Thunder7.2.13.3884 JayXon
    免费获取半年 Bitdefender Total Security 2014
    WIN8.1 PRO RTM VOL.2013.09.18
    免费一年MAP2014+6个月免费MIS2014
    大蜘蛛9.0正式版
    腾讯控股涉足商业银行 微信或成先头兵
    植物大战僵尸2:奇妙时空之旅[官方安卓简体中文高清版]有内含....
    苹果iPhone 5C和5S发布后,消费者如何选择?
    pandas中DataFrame操作(一)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5195255.html
Copyright © 2020-2023  润新知