使用Matlab对两个文件中的图片去重,这个我看网上也没有人写。或许有python了,不过我开一个先例了
思路: 利用两个图片的像素和的差,然后对比,若是像素小于某个值,就认为两个图片是相似的,否则就是不相识的。
代码如下:
clear file_path1 = 'F:\DataShu\Data\NoMark\';% 图像文件夹路径 img_path_list1 = dir(strcat(file_path1,'*.jpg')); img_num1=length(img_path_list1); file_path2 = 'F:\DataShu\Data\pig_data\';% 图像文件夹路径 img_path_list2 = dir(strcat(file_path2,'*.jpg')); img_num2=length(img_path_list2); if img_num2 > 0%有满足条件的图像 for j = 1:img_num1 %逐一读取图像 image_name1 = img_path_list1(j).name;% 图像名 image1 = imread(strcat(file_path1,image_name1)); %图像处理过程 省略 flag=0 for k=1:img_num2 %fprintf("正在处理ceshi中的第 %d 张图片与第 %d 张图片对比\n",j,k); image_name2 = img_path_list2(k).name;% 图像名 image2 = imread(strcat(file_path2,image_name2)); a=rgb2gray(image1); b=rgb2gray(image2); sum_a=sum(abs(sum(a))); sum_b=sum(abs(sum(b))); if abs(sum_a-sum_b)<100 %fprintf("两张图片的像素差:%d\n",abs(sum_a-sum_b)); flag=1 break; end %imwrite(image1,strcat('F:\ceshi3\'),'jpg'); end if flag==0 fprintf("保存的图片是:%s\n",image_name1); imwrite(image1,image_name1); end end end
最终的效果还是不错的,就是耽误时间(这个用实验室电脑,连夜跑就完了)。大佬们看到了也可以优化。