matlab版本
打开文件选择单图像
[filename, path]=uigetfile('*.*','open');
c1=[path filename];
I1 = imread(c1);
单文件选择批量图片
file_path = '.\data\';% 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中所有jpg格式的图像
img_num = length(img_path_list);%获取图像总数量
if img_num > 0 %有满足条件的图像
for j = 1:img_num %逐一读取图像
image_name = img_path_list(j).name;% 图像名
image = imread(strcat(file_path,image_name));
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的图像名
%图像处理过程 省略
end
end
读取文件夹以及子文件夹所有图像
p = genpath('.\data');% 获得文件夹data下所有子文件的路径,这些路径存在字符串p中,以';'分割
length_p = size(p,2);%字符串p的长度
path = {};%建立一个单元数组,数组的每个单元中包含一个目录
temp = [];
for i = 1:length_p %寻找分割符';',一旦找到,则将路径temp写入path数组中
if p(i) ~= ';'
temp = [temp p(i)];
else
temp = [temp '\']; %在路径的最后加入 '\'
path = [path ; temp];
temp = [];
end
end
clear p length_p temp;
%至此获得data文件夹及其所有子文件夹(及子文件夹的子文件夹)的路径,存于数组path中。
%下面是逐一文件夹中读取图像
file_num = size(path,1);% 子文件夹的个数
for i = 1:file_num
file_path = path{i}; % 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));
img_num = length(img_path_list); %该文件夹中图像数量
if img_num > 0
for j = 1:img_num
image_name = img_path_list(j).name;% 图像名
image = imread(strcat(file_path,image_name));
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的路径和图像名
%图像处理过程 省略
end
end
end
建立读取图像并且建立Mat类
clear
close all
p = genpath('E:\车牌\新建文件夹 (2)\20160427');% 获得文件夹data下所有子文件的路径,这些路径存在字符串p中,以';'分割
length_p = size(p,2);%字符串p的长度
path = {};%建立一个单元数组,数组的每个单元中包含一个目录
temp = [];
for i = 1:length_p %寻找分割符';',一旦找到,则将路径temp写入path数组中
if p(i) ~= ';'
temp = [temp p(i)];
else
temp = [temp '\']; %在路径的最后加入 '\'
path = [path ; temp];
temp = [];
end
end
clear p length_p temp;
%至此获得data文件夹及其所有子文件夹(及子文件夹的子文件夹)的路径,存于数组path中。
%下面是逐一文件夹中读取图像
%建立矩阵(图片大小要相同)
num=0;
allimage=[];
file_num = size(path,1);% 子文件夹的个数
for i = 1:file_num
file_path = path{i}; % 图像文件夹路径
img_path_list = dir(strcat(file_path,'*.jpg'));
img_num = length(img_path_list); %该文件夹中图像数量
if img_num > 0
for j = 1:img_num
image_name = img_path_list(j).name;% 图像名
image = imread(strcat(file_path,image_name));
fprintf('%d %d %s\n',i,j,strcat(file_path,image_name));% 显示正在处理的路径和图像名
%图像处理过程 省略
num=num+1;
allimage = [allimage,image];
if (mod(num,200)==0 )
ii=num2str(num/200);
chepai=strcat(ii,'.mat');
save(chepai,'allimage','num');
allimage=[];
end %每200张图建立一个mat类
end
end
end
chepai=strcat(num2str(num/200+1),'.mat');
save(chepai,'allimage','num');%余下的构成一个mat
opencv版本
打开单图像
srcImage = cv::imread("E:\\learning opencv 程序\\2\\颜末.jpg");
遍历文件夹图像
原文出处
C/C++遍历文件夹和文件
本方法可用于windows和linux双平台,采用C/C++标准库函数。
库函数
包含头文件 #include
用到数据结构_finddata_t,文件信息结构体的指针。
1. struct _finddata_t
2. {
3. unsigned attrib; //文件属性
4. time_t time_create; //文件创建时间
5. time_t time_access; //文件上一次访问时间
6. time_t time_write; //文件上一次修改时间
7. _fsize_t size; //文件字节数
8. char name[_MAX_FNAME]; //文件名
9. };
文件属性是无符号整数,取值为相应的宏:_A_ARCH(存档),_A_SUBDIR(文件夹),_A_HIDDEN(隐藏),_A_SYSTEM(系统),_A_NORMAL(正常),_A_RDONLY(只读)。容易看出,通过这个结构体,我们可以得到关于该文件的很多信息。结合以下函数,我们可以将文件信息存储到这个结构体中:
1. //按FileName命名规则匹配当前目录第一个文件
2. _findfirst(_In_ const char * FileName, _Out_ struct _finddata64i32_t * _FindData);
3. //按FileName命名规则匹配当前目录下一个文件
4. _findnext(_In_ intptr_t _FindHandle, _Out_ struct _finddata64i32_t * _FindData);
5. //关闭_findfirst返回的文件句柄
6. _findclose(_In_ intptr_t _FindHandle);
_findfirst 函数返回的是匹配到文件的句柄,数据类型为long。遍历过程可以指定文件类型。
实例
1. #include
2. #include
3. #include
4. using namespace std;
6. //遍历当前目录下的文件夹和文件,默认是按字母顺序遍历
7. bool TraverseFiles(string path,int &file_num)
8. {
9. _finddata_t file_info;
10. string current_path=path+"/*.*"; //可以定义后面的后缀为*.exe,*.txt等来查找特定后缀的文件,*.*是通配符,匹配所有类型,路径连接符最好是左斜杠/,可跨平台
11. //打开文件查找句柄
12. int handle=_findfirst(current_path.c_str(),&file_info);
13. //返回值为-1则查找失败
14. if(-1==handle)
15. return false;
16. do
17. {
18. //判断是否子目录
19. string attribute;
20. if(file_info.attrib==_A_SUBDIR) //是目录
21. attribute="dir";
22. else
23. attribute="file";
24. //输出文件信息并计数,文件名(带后缀)、文件最后修改时间、文件字节数(文件夹显示0)、文件是否目录
25. cout<
(ps:貌似注释多了点,有点碍眼T_T)