opencv——批量处理图片并保存[通俗易懂]

opencv——批量处理图片并保存[通俗易懂]         背景:某文件夹X下有若干张图片,对每一张图片进行处理,将处理后的图片保存至新的文件夹Y下。#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<io…

大家好,欢迎来到IT知识分享网。

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

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <fstream>

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<cv::String> 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 <vector>
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
        //----------------------------------------------------------------------
        // Get list of files 
        // Usage:
        //  string ImagesDir=tmp+"C:\\Images\\*.jpg";
        //  vector<string> files=listFilesInDirectory(ImagesDir); 
        //----------------------------------------------------------------------
        vector<string> listFilesInDirectory(string directoryName)
        {
            WIN32_FIND_DATA FindFileData;
            HANDLE hFind = FindFirstFile(directoryName.c_str(), &FindFileData);
            vector<string> 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<string> files=listFilesInDirectory(YourImagesDirectory+"*.jpg"); 
for(int i=0;i<files.size();i++)
    {
         Mat img=imread(YourImagesDirectory+files[i]);
         imshow("mainwin" , img);
         ...
    }
...

//————————————–补充(2018.06.03)———————————————————-

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

opencv——批量处理图片并保存[通俗易懂]

opencv——批量处理图片并保存[通俗易懂]

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25445.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信