使用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改变日志(logging)存放位置的示例
Mar 27 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
python开发之函数定义实例分析
Nov 12 Python
python 与GO中操作slice,list的方式实例代码
Mar 20 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
浅谈django rest jwt vue 跨域问题
Oct 26 Python
python画图把时间作为横坐标的方法
Jul 07 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 Python
Python利用命名空间解析XML文档
Aug 10 Python
详解python内置模块urllib
Sep 09 Python
python学习之panda数据分析核心支持库
Python基于Tkinter开发一个爬取B站直播弹幕的工具
May 06 #Python
Python爬虫之爬取最新更新的小说网站
May 06 #Python
Python基础之操作MySQL数据库
Python 如何安装Selenium
Django实现在线无水印抖音视频下载(附源码及地址)
Django给表单添加honeypot验证增加安全性
You might like
快速配置PHPMyAdmin方法
2008/06/05 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
PHP面向对象程序设计之对象生成方法详解
2016/12/02 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
2019/10/25 PHP
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
javascript制作2048游戏
2015/03/30 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
2016/05/17 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python列表推导式的使用方法
2013/11/21 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
监理资料员岗位职责
2014/01/03 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
《雨点儿》教学反思
2014/04/14 职场文书
门前三包责任书
2014/04/15 职场文书
学生党员一帮一活动总结
2014/07/08 职场文书
工作检讨书怎么写
2014/10/10 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript