车牌识别(二)批量提取文件夹下面的图片

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)

你可能感兴趣的:(车牌识别(二)批量提取文件夹下面的图片)