使用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发送SMTP邮件的教程
Apr 29 Python
Python定时执行之Timer用法示例
May 27 Python
Python 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
python使用sqlite3时游标使用方法
Mar 13 Python
django静态文件加载的方法
May 20 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
python 中xpath爬虫实例详解
Aug 26 Python
解决Python中报错TypeError: must be str, not bytes问题
Apr 07 Python
给ubuntu18安装python3.7的详细教程
Jun 08 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
2014/02/18 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
showModelDialog弹出文件下载窗口的使用示例
2013/11/19 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
node.js超时timeout详解
2014/11/26 Javascript
js数组的操作指南
2014/12/28 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
nodejs和php实现图片访问实时处理
2017/01/05 NodeJs
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
深入解析Python中的线程同步方法
2016/06/14 Python
Python进阶-函数默认参数(详解)
2017/05/18 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python使用udp实现聊天器功能
2018/12/10 Python
Python3进制之间的转换代码实例
2019/08/24 Python
django序列化serializers过程解析
2019/12/14 Python
Keras:Unet网络实现多类语义分割方式
2020/06/11 Python
java字符串格式化输出实例讲解
2021/01/06 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
先进党支部事迹材料
2014/01/13 职场文书
期末自我鉴定
2014/01/23 职场文书
社区活动邀请函范文
2014/01/29 职场文书
演讲稿格式
2014/04/30 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
表扬信范文
2019/04/22 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL