使用python如何删除同一文件夹下相似的图片


Posted in Python onMay 07, 2021

前言

最近整理图片发现,好多图片都非常相似,于是写如下代码去删除,有两种方法:

注:第一种方法只对于连续图片(例一个视频里截下的图片)准确率也较高,其效率高;第二种方法准确率高,但效率低

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

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

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import cv2
from skimage.measure import compare_ssim
# import shutil
# def yidong(filename1,filename2):
#     shutil.move(filename1,filename2)
def delete(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) for rootdir, _, files in os.walk(path) for file in files if
                 (file.endswith('.jpg'))]
    for currIndex, filename in enumerate(img_files):
        if not os.path.exists(img_files[currIndex]):
            print('not exist', img_files[currIndex])
            break
        img = cv2.imread(img_files[currIndex])
        img1 = cv2.imread(img_files[currIndex + 1])
        ssim = compare_ssim(img, img1, multichannel=True)
        if ssim > 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
        if currIndex >= len(img_files)-1:
            break
    for image in imgs_n:
        # yidong(image, save_path_img)
        delete(image)

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

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

代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import cv2
from skimage.measure import compare_ssim
import shutil
import datetime
def yidong(filename1,filename2):
    shutil.move(filename1,filename2)
def delete(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) in os.walk(path):
        for dirc in dirs:
            if dirc == '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) for rootdir, _, files in os.walk(img_path) for file in files if
                             (file.endswith('.jpg'))]
                for currIndex, filename in enumerate(img_files):
                    if not os.path.exists(img_files[currIndex]):
                        print('not exist', img_files[currIndex])
                        break
                    new_cur = 0
                    for i in range(10000000):
                        currIndex1 =new_cur
                        if currIndex1 >= len(img_files) - currIndex - 1:
                            break
                        else:
                            size = os.path.getsize(img_files[currIndex1 + currIndex + 1])
                            if size < 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)
                                if ssim > 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)
                for image in del_list:
                    # yidong(image, save_path_img)
                    delete(image)
                    print('delete',image)

总结

到此这篇关于使用python如何删除同一文件夹下相似图片的文章就介绍到这了,更多相关python删除文件夹相似图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
Python如何快速实现分布式任务
Jul 06 Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 Python
对Python Class之间函数的调用关系详解
Jan 23 Python
Python实现的爬取百度贴吧图片功能完整示例
May 10 Python
kafka-python 获取topic lag值方式
Dec 23 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
python绘制分布折线图的示例
Sep 24 Python
python各种excel写入方式的速度对比
Nov 10 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
雄兵连:第三季确定会出,不过时间未定,鹤熙是第三季的主角!
2020/03/13 国漫
PHP 中关于ord($str)&amp;gt;0x80的详细说明
2012/09/23 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
JavaScript中的Math.LN2属性用法详解
2015/06/12 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
p5.js入门教程和基本形状绘制
2018/03/15 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
jQuery实现简单弹幕制作
2020/12/10 jQuery
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
Python logging模块handlers用法详解
2020/08/14 Python
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
员工拾金不昧表扬信
2014/01/09 职场文书
初一生物教学反思
2014/01/18 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
和睦家庭事迹
2014/05/14 职场文书
安全目标责任书
2014/07/22 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
大班上学期个人总结
2015/02/13 职场文书
《酸的和甜的》教学反思
2016/02/18 职场文书
浅谈Python协程asyncio
2021/06/20 Python