opencv——批量处理图片并保存

           背景:某文件夹X下有若干张图片,对每一张图片进行处理,将处理后的图片保存至新的文件夹Y下。

#include 
#include 
#include 
#include 
#include 

int main() {
	cv::String path = "E:/Data Sets/ORIGINAL/data_road_fisheye/training/label/";        //待处理图片文件夹地址
	cv::String dest = "E:/Data Sets/ORIGINAL/data_road_fisheye/training/greylabel/";    //处理后图片的保存地址
	cv::String savedfilename;
	std::vector filenames;
	cv::Mat srcImg, dstImg;

	cv::glob(path, filenames);                 //opencv里面用来读取指定路径下文件名的一个很好用的函数
	for (int i = 0; i < filenames.size(); i++) {
		srcImg = cv::imread(filenames[i]);
		cv::cvtColor(srcImg, dstImg, CV_RGB2GRAY);
		savedfilename = dest + filenames[i].substr(55);    
		std::cout << savedfilename << std::endl;
		cv::imwrite(savedfilename, dstImg);
	}
	return 0;
}

        cv::glob()函数极大地简化了对文件的读取。

        如果不适用opencv,那么可以采取下面这个方法,在stackoverflow上找到的solution,还没试过:

#include 
#include 
#include 
#include 
#include 
using namespace std;
        //----------------------------------------------------------------------
        // Get list of files 
        // Usage:
        //  string ImagesDir=tmp+"C:\\Images\\*.jpg";
        //  vector files=listFilesInDirectory(ImagesDir); 
        //----------------------------------------------------------------------
        vector listFilesInDirectory(string directoryName)
        {
            WIN32_FIND_DATA FindFileData;
            HANDLE hFind = FindFirstFile(directoryName.c_str(), &FindFileData);
            vector listFileNames;
            listFileNames.push_back(FindFileData.cFileName);
            while (FindNextFile(hFind, &FindFileData))
                listFileNames.push_back(FindFileData.cFileName);
            return listFileNames;
        }
...
// somewhere in main
string YourImagesDirectory="C:\\Pick\\";
vector files=listFilesInDirectory(YourImagesDirectory+"*.jpg"); 
for(int i=0;i

//--------------------------------------补充(2018.06.03)----------------------------------------------------------

cv::cvrColor(srcImg, dstImg, CV_RGB2GRAY)将三通道的彩色图片转换成了单通道灰色图片,但是后来用cv::imread()加载出来后发现图片格式又成了三通道,只不过三个通道的值都一样 ,参考了一下官方文档,问题出在cv::imread()函数:

opencv——批量处理图片并保存_第1张图片

opencv——批量处理图片并保存_第2张图片

你可能感兴趣的:(opencv)