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

来源:互联网 发布:淘宝怎么提高搜索排名 编辑:程序博客网 时间:2024/05/01 19:34
/*--------------------------------------------------------------------------------------------*//*--------------------------从文件夹中读取图片,并将差异大的储存-----------------------------*//*-----------------------------------------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);      }  }  


原创粉丝点击