方法一:相邻两个文件比较相似度,相似就把第二个加到新列表里,然后进行新列表去重,统一删除。
例如:有文件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
暂无评论内容