python中如何删除相似的图片?

图片[1]-python中如何删除相似的图片?-uusu优素-乐高,模型,3d打印,编程

方法一:相邻两个文件比较相似度,相似就把第二个加到新列表里,然后进行新列表去重,统一删除。

例如:有文件1-10,首先1和2相比较,若相似,则把2加入到新列表里,再接着2和3相比较,若不相似,则继续进行3和4比较…一直比到最后,然后删除新列表里的图片

代码如下:

#!/usr/bin/envpython
#-*-coding:utf-8-*-
#@Time:2019/1/159:19
#@Author:xiaodai
importos
importcv2
fromskimage.measureimportcompare_ssim
#importshutil
#defyidong(filename1,filename2):
#shutil.move(filename1,filename2)
defdelete(filename1):
os.remove(filename1)
if__name__=='__main__':
path=r'D:\camera_pic\test\rec_pic'
#save_path_img=r'E:\0115_test\rec_pic'
#os.makedirs(save_path_img,exist_ok=True)
img_path=path
imgs_n=[]
num=[]
img_files=[os.path.join(rootdir,file)forrootdir,_,filesinos.walk(path)forfileinfilesif
(file.endswith('.jpg'))]
forcurrIndex,filenameinenumerate(img_files):
ifnotos.path.exists(img_files[currIndex]):
print('notexist',img_files[currIndex])
break
img=cv2.imread(img_files[currIndex])
img1=cv2.imread(img_files[currIndex+1])
ssim=compare_ssim(img,img1,multichannel=True)
ifssim>0.9:
imgs_n.append(img_files[currIndex+1])
print(img_files[currIndex],img_files[currIndex+1],ssim)
else:
print('small_ssim',img_files[currIndex],img_files[currIndex+1],ssim)
currIndex+=1
ifcurrIndex>=len(img_files)-1:
break
forimageinimgs_n:
#yidong(image,save_path_img)
delete(image)

方法二:逐个去比较,若相似,则从原来列表删除,添加到新列表里,若不相似,则继续

例如:有文件1-10,首先1和2相比较,若相似,则把2在原列表删除同时加入到新列表里,再接着1和3相比较,若不相似,则继续进行1和4比较…一直比,到最后一个,再继续,正常应该再从2开始比较,但2被删除了,所以从3开始,继续之前的操作,最后把新列表里的删除。

#!/usr/bin/envpython
#-*-coding:utf-8-*-
#@Time:2019/1/1612:03
#@Author:xiaodai
importos
importcv2
fromskimage.measureimportcompare_ssim
importshutil
importdatetime
defyidong(filename1,filename2):
shutil.move(filename1,filename2)
defdelete(filename1):
os.remove(filename1)
print('real_time:',now_now-now)
if__name__=='__main__':
path=r'F:\temp\demo'
#save_path_img=r'F:\temp\demo_save'
#os.makedirs(save_path_img,exist_ok=True)
for(root,dirs,files)inos.walk(path):
fordircindirs:
ifdirc=='rec_pic':
pic_path=os.path.join(root,dirc)
img_path=pic_path
imgs_n=[]
num=[]
del_list=[]
img_files=[os.path.join(rootdir,file)forrootdir,_,filesinos.walk(img_path)forfileinfilesif
(file.endswith('.jpg'))]
forcurrIndex,filenameinenumerate(img_files):
ifnotos.path.exists(img_files[currIndex]):
print('notexist',img_files[currIndex])
break
new_cur=0
foriinrange(10000000):
currIndex1=new_cur
ifcurrIndex1>=len(img_files)-currIndex-1:
break
else:
size=os.path.getsize(img_files[currIndex1+currIndex+1])
ifsize<512:
#delete(img_files[currIndex+1])
del_list.append(img_files.pop(currIndex1+currIndex+1))
else:
img=cv2.imread(img_files[currIndex])
img=cv2.resize(img,(46,46),interpolation=cv2.INTER_CUBIC)
img1=cv2.imread(img_files[currIndex1+currIndex+1])
img1=cv2.resize(img1,(46,46),interpolation=cv2.INTER_CUBIC)
ssim=compare_ssim(img,img1,multichannel=True)
ifssim>0.9:
#imgs_n.append(img_files[currIndex+1])
print(img_files[currIndex],img_files[currIndex1+currIndex+1],ssim)
del_list.append(img_files.pop(currIndex1+currIndex+1))
new_cur=currIndex1
else:
new_cur=currIndex1+1
print('small_ssim',img_files[currIndex],img_files[currIndex1+currIndex+1],ssim)
forimageindel_list:
#yidong(image,save_path_img)
delete(image)
print('delete',image)
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容