zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    黄聪:解决Web部署 svg/woff/woff2字体 404错误
    黄聪:C#中HtmlAgilityPack判断是否包含或不包含指定的属性或值
    黄聪:GeckoFX如何引用jquery文件并执行自定义JS
    黄聪:css3实现图片划过一束光闪过效果(图片光影掠过效果)
    黄聪:C#带cookie模拟登录百度
    黄聪:如何为IIS增加svg和woff等字体格式的MIME
    黄聪:微信支付错误两个问题的解决:curl出错,错误码:60
    黄聪:《跟黄聪学WordPress插件开发》
    黄聪:GeckoWebBrowser多窗口独立cookie
    黄聪:远程连接mysql数据库注意事项记录(远程连接慢skip-name-resolve)
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5195255.html
Copyright © 2011-2022 走看看