使用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中metaclass元类的创建与使用
Jun 30 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
Python通过matplotlib画双层饼图及环形图简单示例
Dec 15 Python
浅谈pytorch和Numpy的区别以及相互转换方法
Jul 26 Python
python 输出所有大小写字母的方法
Jan 02 Python
python实现计数排序与桶排序实例代码
Mar 28 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
python实现局域网内实时通信代码
Dec 22 Python
Django 返回json数据的实现示例
Mar 05 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
Apr 24 Python
python多线程爬取西刺代理的示例代码
Jan 30 Python
Python+Appium新手教程
Apr 17 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
javascript定时器完整实例
2015/02/10 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
Javascript复制实例详解
2016/01/28 Javascript
Bootstrap学习笔记之css样式设计(1)
2016/06/07 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
javascript实现计算器功能
2020/03/30 Javascript
浅谈Vue static 静态资源路径 和 style问题
2020/11/07 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
python 调用HBase的简单实例
2016/12/18 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
2019/02/19 Python
python 内置函数汇总详解
2019/09/16 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
创业计划书中要认真思考的问题
2013/12/28 职场文书
老师给学生的表扬信
2014/01/17 职场文书
西式结婚主持词
2014/03/14 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
2015年个人工作总结报告
2015/04/25 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Python合并多张图片成PDF
2021/06/09 Python