matlab批量处理一个文件夹内的所有图片,并且自动命名保存到另外的文件夹。

本文介绍了一个用于评估人脸检测算法准确性的Matlab脚本。通过遍历特定文件夹中的所有图片,该脚本不仅计算出准确率,还进一步将检测成功的图片与失败的图片分开保存,便于后续分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         测试某一个算法对图片检测的准确率。让其在某一个文件夹一次性检测并输出准确率。简单记录!!!


%%%制作脚本文件遍历文件夹测试 (运用某算法来检测某一个文件夹中的所有人脸图片,并输出一个准确率)


% 如果你的图片命名方式是1.jpg  2.jpg.......,其实后来发现,好像也不用这样命名,但是这样比较整洁
clear;clc;
file_path =  'G:\facedownload\my_own_data\detece_ada_1\';   %指向目标文件夹
face_bound = 0;
img_path_list = dir(strcat(file_path,'*.jpg'));   %组合成一个完整的绝对路径,这里会定义顺序
img_num = length(img_path_list);          %找出文件夹内有多少个文件,也就是多少张图片
tic;  %  计时开始,(可有可无)
if img_num > 0
    %img_num = 5;   %%先尝试一下,随机选取的5张,不是那个命名的1-5的顺序
    for j = 1:img_num
         image_name = img_path_list(j).name;
         disp(fprintf('正在运用某算法检测第 %d 张图片',j));
         [faces,] = detectFaces(strcat(file_path,image_name));    %开始遍历检测图片,我的是人脸检测
         if(~isempty(faces));
             face_bound = face_bound + 1;
             disp(fprintf('检测到 %d 张人脸',face_bound));
         end
    end
    toc;  %计时结束
    disp(fprintf('总共检测 %d 张图片,其中检测到 %d 个人脸,',img_num - 200,face_bound));
    acc=vpa(face_bound / img_num  *100,4);
    disp(['检测准确率 acc=',char(acc),'%']);
end

        现在我打算将检测的图片中,将那些能够检测到人脸的图片抽取出来,放到文件夹1,和检测不出来的图片放到文件夹2。方便我观察算法对那些图片比较敏感以及那些图片不敏感!!

        我只保存能够检测到的图片,如果想保存检测不到的图片,加一个else即可。同样的操作。

%%%制作脚本文件遍历很多图片,并且分别保存能检测出来,和不能检测出来的,抽取出来


clear;clc;
file_path = 'G:\facedownload\my_own_data\所有图片\';   %指向目标文件夹
face_bound = 0;         
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;
         disp(fprintf('正在检测第 %d 张图片',j));
         img = imread(strcat(file_path,image_name));
         [faces,] = detectFaces(strcat(file_path,image_name));    %开始遍历检测图片
         if(~isempty(faces));   %检测到人脸
             face_bound = face_bound + 1;
             disp(fprintf('检测到 %d 张人脸',face_bound));
             
          %%%%%%%%%这里几句话是不自动命名,保存图片为原来的名字%%%%%%%%%%%%%%%%   
     %        file_path1 =  'G:\facedownload\my_own_data\检测成功\'; 
     %        img_path_list1 = dir(strcat(file_path1,'*.jpg')); 
     %        save_path = strcat(file_path1,image_name);
     %        imwrite(img,save_path,'jpg','quality',100); %%用图片本来名称保存
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

            file_path1 = 'G:\facedownload\my_own_data\检测成功\';   %抽取之后放入的文件夹
            img_path_list1 = dir(strcat(file_path1,'*.jpg'));  
            L = length(img_path_list1) + 1;  %找出文件夹内已经有多少张图片
            save_path=['G:\facedownload\my_own_data\检测成功\',num2str(L),'.jpg'];  %指定保存位置。并自动命名1.jpg、2.jpg等,形成一个完成的图片路径。
            imwrite(img,save_path,'jpg','quality',100);   %自动保存检测到的人脸图片到指定位置,%测试时要注释掉,(这个地方有坑,下面会解释)
             
             [face,] = detectFaces(save_path);    %检查此重新解压缩的jpg图片是否任然能检测到人脸
             if(~isempty(face));
                 disp(  ' OK !!! ');
             else
                delete(save_path)
                disp(  ' Not OK !!! ');
             end
         end
    end
   
    disp(fprintf('总共检测 %d 张图片,其中检测到 %d 个人脸,',img_num,face_bound));

end

       因为  jpg  格式的图片都是有压缩的图片,所以如果是简单的imwrite的话,很可能在你原来的图片能狗检测到,imwrite之后的图片就检测不到了。所以我采取了两个措施,第一,就是加一个quality 100.具体可以查看帮助文档。这样生成的图片会好一点,但是也会对后续检测有影响,所以我在上面的代码之后又加了一行检测生成之后的图片,如果ok就保存,不ok就删除。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值