使用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 相关文章推荐
Python函数嵌套实例
Sep 23 Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 Python
详解python eval函数的妙用
Nov 16 Python
python写入已存在的excel数据实例
May 03 Python
Pandas DataFrame 取一行数据会得到Series的方法
Nov 10 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
Django的Modelforms用法简介
Jul 27 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
Apr 16 Python
Python 绘制可视化折线图
Jul 22 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
php自动加载方式集合
2016/04/04 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
css把超出的部分显示为省略号的方法兼容火狐
2008/07/23 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
JS实现简单获取最近7天和最近3天日期的方法
2018/04/18 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
浅析Python 读取图像文件的性能对比
2019/03/07 Python
详解Python中is和==的区别
2019/03/21 Python
Python如何存储数据到json文件
2020/03/09 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
世界上最好的儿童品牌:AlexandAlexa
2018/01/27 全球购物
Ref与out有什么不同
2012/11/24 面试题
实习生自我鉴定
2013/12/12 职场文书
开学典礼感言
2014/02/16 职场文书
厨房管理计划书
2014/04/27 职场文书
医学检验专业自荐信
2014/09/18 职场文书
银行求职自荐信范文
2015/03/04 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS
win10重装系统后上不了网怎么办 win10重装系统网络故障的解决办法
2022/07/23 数码科技