使用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