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