使用python如何删除同一文件夹下相似的图片

作者:MHyourh 时间:2021-10-19 02:52:23 

前言

最近整理图片发现,好多图片都非常相似,于是写如下代码去删除,有两种方法:

注:第一种方法只对于连续图片(例一个视频里截下的图片)准确率也较高,其效率高;第二种方法准确率高,但效率低

方法一:相邻两个文件比较相似度,相似就把第二个加到新列表里,然后进行新列表去重,统一删除。

例如:有文件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)

来源:https://blog.csdn.net/sinat_38682860/article/details/103498657

标签:python,删除,图片
0
投稿

猜你喜欢

  • pytorch 实现模型不同层设置不同的学习率方式

    2023-11-20 00:29:25
  • Python+OpenCV内置方法实现行人检测

    2023-10-19 12:52:47
  • python的ping网络状态监测的实现(含多IP)

    2022-03-16 07:21:29
  • JavaScript的一些小技巧分享

    2024-04-23 09:29:01
  • 理解生产者消费者模型及在Python编程中的运用实例

    2021-04-07 01:01:59
  • TensorFlow使用Graph的基本操作的实现

    2023-04-10 22:22:37
  • redis不能访问本机真实ip地址的解决方案

    2023-07-05 13:09:44
  • python实现获取序列中最小的几个元素

    2023-12-24 19:11:32
  • window.opener用法和用途实例介绍

    2024-04-17 10:38:13
  • python使用正则表达式匹配字符串开头并打印示例

    2021-07-02 00:52:13
  • 解决python 出现unknown encoding: idna 的问题

    2023-10-06 21:26:06
  • 详解Python结合Genetic Algorithm算法破解网易易盾拼图验证

    2023-05-22 01:34:36
  • 鼠标驱动图片变化

    2009-07-26 10:03:00
  • Go实现分布式系统高可用限流器实战

    2024-02-18 14:40:10
  • php基于PDO实现功能强大的MYSQL封装类实例

    2023-11-16 22:50:27
  • 用Python监控NASA TV直播画面的实现步骤

    2022-09-15 21:54:15
  • python 实现IP子网计算

    2022-04-24 20:27:37
  • Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】

    2021-09-16 17:17:44
  • Dreamweaver实现flash透明背景

    2008-05-04 09:35:00
  • mysql中判断记录是否存在方法比较

    2024-01-27 05:14:49
  • asp之家 网络编程 m.aspxhome.com