使用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通过正则查找微博@(at)用户的方法
Mar 13 Python
Python正则表达式匹配HTML页面编码
Apr 08 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
Kali Linux安装ipython2 和 ipython3的方法
Jul 11 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
快速查找Python安装路径方法
Feb 06 Python
Python 自由定制表格的实现示例
Mar 20 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
Python实时监控网站浏览记录实现过程详解
Jul 14 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
ThinkPHP3.1查询语言详解
2014/06/19 PHP
php上传文件问题汇总
2015/01/30 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
AngularJS基础 ng-disabled 指令详解及简单示例
2016/08/01 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
jQuery模拟下拉框选择对应菜单的内容
2017/03/07 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
Python数组定义方法
2016/04/13 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
python增加图像对比度的方法
2019/07/12 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
2020/02/10 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
美国性感女装网站:bebe
2017/03/04 全球购物
常用UNIX 命令(Linux的常用命令)
2015/12/26 面试题
婚纱店策划方案
2014/05/22 职场文书
采购员岗位职责
2015/02/03 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
2015年第31个教师节致辞
2015/07/31 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python