从文件夹中读取图片,并将差异大的储存

/*--------------------------------------------------------------------------------------------*/
/*--------------------------从文件夹中读取图片,并将差异大的储存-----------------------------*/
/*-----------------------------------------by agricultureman_20130325-----------------------*/
/*-----------------------------------------------------------------------------------------*/

//#include <windows.h>
#include <io.h>
#include <iostream>
#include <time.h>
#include <vector>
#include <afx.h>

#include <opencv2\opencv.hpp>
#include <cv.h>
#include <highgui.h>
using namespace cv; 
#pragma   comment(lib,   "winmm.lib ")
#pragma comment(lib,"opencv_core244d.lib")
#pragma comment(lib,"opencv_highgui244d.lib")

int diffPics(Mat frame_src1, Mat frame_src2, int i_threshold, Mat& m_dst);
bool isDiff(Mat m_src1, Mat m_src2, int i_threshold, long l_total);
void getFiles( string path, vector<string>& files );
Mat g_diffPics;
int main(int argc,char** argv)
{
	
	Mat pic1,pic2;
	
	const string filePath = "E:\\MyDocuments\\Visual Studio 2010\\Projects\\test_cap2.0\\新建文件夹\\";  //源文件地址
	const string savePath = "E:\\MyDocuments\\Visual Studio 2010\\Projects\\test_cap2.0\\OP2\\";		//目标文件地址
	vector<string> files;  

	getFiles(filePath, files );  //get names of files
  	int size = files.size();  
	int i = 0;
	string jpgSrcPath = filePath+files[i];
	string jpgSavePath = savePath + files[i];
	pic1 = imread(jpgSrcPath,1);
	imwrite(jpgSavePath,pic1);
	for (int i = 1;i < size;i++)  
	{  
		string jpgSrcPath = filePath+files[i];
		string jpgSavePath = savePath + files[i];
		pic2 = imread( jpgSrcPath, 1);
		if(isDiff(pic1, pic2, 20, 2500))
		{	

			imwrite(savePath + files[i], pic2);
			imwrite(savePath + "Dif_" + files[i], g_diffPics);
			pic1 = pic2.clone();
		}
		if(waitKey(2)>=0) break;
	}
	return 0;
	}  


/*====================================================================================================================*/

/*----------------------------------------------------------diffPics--------------------------------------------------*/
int diffPics(Mat frame_src1, Mat frame_src2, int i_threshold, Mat& m_dst)
{
	m_dst.create(frame_src1.size(), CV_8UC1);
	Mat tem = abs(frame_src1 - frame_src2);
	cvtColor(tem, m_dst,  CV_RGB2GRAY);
	threshold(m_dst, m_dst, i_threshold, 255, THRESH_TOZERO);
	return 0;
}
/*----------------------------------------------isDiff--------------------------------------------------*/
bool isDiff(Mat m_src1, Mat m_src2, int i_thresh, long l_total)
{
	bool flag;
	long total= 0;
	diffPics(m_src1, m_src2, i_thresh, g_diffPics);
	for(unsigned int i = 0;i<g_diffPics.rows; i++)
		for(unsigned int j = 0;j<g_diffPics.cols; j++)
			{
				if (g_diffPics.at<uchar>(i, j)>0)
					total += 1;
			}

	if ( total > l_total)
		flag = true;
	else
		flag = false;

	return flag;
}
/*-------------------------------------------------------getFiles-------------------------------------------------------------------*/
void getFiles( string path, vector<string>& files )  
{  
    //文件句柄  
    long   hFile   =   0;  
    //文件信息  
    struct _finddata_t fileinfo;  
    string p;  
    if((hFile = _findfirst(p.assign(path).append("\\*").c_str(),&fileinfo)) !=  -1)  
    {  
        do  
        {  
            
			//如果是目录,迭代之  
            //如果不是,加入列表  
            if((fileinfo.attrib &  _A_SUBDIR))  
            {  
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)  
                    getFiles( p.assign(path).append("\\").append(fileinfo.name), files );  
            }  
            else  
            {  
                files.push_back(/*p.assign(path).append("\\").append*/string(fileinfo.name)/*.append("\r\n") */);  
            }

        }while(_findnext(hFile, &fileinfo)  == 0);  
        _findclose(hFile);  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值