/*--------------------------------------------------------------------------------------------*//*--------------------------从文件夹中读取图片,并将差异大的储存-----------------------------*//*-----------------------------------------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;elseflag = 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); } }