python查找重复图片并删除(图片去重)


Posted in Python onJuly 16, 2019

本文实例为大家分享了python查找重复图片并删除的具体代码,供大家参考,具体内容如下

和网络爬虫配套的,也可单独使用,从网上爬下来的图片重复太多,代码支持识别不同尺寸大小一致的图片,并把重复的图片删除,只保留第一份。

# -*- coding: utf-8 -*-
import cv2
import numpy as np
import os,sys,types

def cmpandremove2(path):
  dirs = os.listdir(path)
  dirs.sort()
  if len(dirs) <= 0:
    return
  dict={}
  for i in dirs:
    prepath = path + "/" + i
    preimg = cv2.imread(prepath)
    if type(preimg) is types.NoneType:
      continue
    preresize = cv2.resize(preimg, (8,8))
    pregray = cv2.cvtColor(preresize, cv2.COLOR_BGR2GRAY)
    premean = cv2.mean(pregray)[0]
    prearr = np.array(pregray.data)
    for j in range(0,len(prearr)):
      if prearr[j] >= premean:
        prearr[j] = 1
      else:
        prearr[j] = 0
    print "get", prepath
    dict[i] = prearr
  dictkeys = dict.keys()
  dictkeys.sort()
  index = 0
  while True:
    if index >= len(dictkeys):
      break
    curkey = dictkeys[index]
    dellist=[]
    print curkey
    index2 = index
    while True:
      if index2 >= len(dictkeys):
        break
      j = dictkeys[index2]
      if curkey == j:
        index2 = index2 + 1
        continue
      arr1 = dict[curkey]
      arr2 = dict[j]
      diff = 0
      for k in range(0,len(arr2)):
        if arr1[k] != arr2[k]:
          diff = diff + 1
      if diff <= 5:
        dellist.append(j)
      index2 = index2 + 1
    if len(dellist) > 0:
      for j in dellist:
        file = path + "/" + j
        print "remove", file
        os.remove(file)
        dict.pop(j)
      dictkeys = dict.keys()
      dictkeys.sort()
    index = index + 1


def cmpandremove(path):
  index = 0
  flag = 0
  dirs = os.listdir(path)
  dirs.sort()
  if len(dirs) <= 0:
    return 0
  while True:
    if index >= len(dirs):
      break
    prepath = path + dirs[index]
    print prepath
    index2 = 0
    preimg = cv2.imread(prepath)
    if type(preimg) is types.NoneType:
      index = index + 1
      continue
    preresize = cv2.resize(preimg, (8, 8))
    pregray = cv2.cvtColor(preresize, cv2.COLOR_BGR2GRAY)
    premean = cv2.mean(pregray)[0]
    prearr = np.array(pregray.data)
    for i in range(0, len(prearr)):
      if prearr[i] >= premean:
        prearr[i] = 1
      else:
        prearr[i] = 0
    removepath = []
    while True:
      if index2 >= len(dirs):
        break
      if index2 != index:
        curpath = path + dirs[index2]
        # print curpath
        curimg = cv2.imread(curpath)
        if type(curimg) is types.NoneType:
          index2 = index2 + 1
          continue
        curresize = cv2.resize(curimg, (8, 8))
        curgray = cv2.cvtColor(curresize, cv2.COLOR_BGR2GRAY)
        curmean = cv2.mean(curgray)[0]
        curarr = np.array(curgray.data)
        for i in range(0, len(curarr)):
          if curarr[i] >= curmean:
            curarr[i] = 1
          else:
            curarr[i] = 0
        diff = 0
        for i in range(0, len(curarr)):
          if curarr[i] != prearr[i]:
            diff = diff + 1
        if diff <= 5:
          print 'the same'
          removepath.append(curpath)
          flag = 1
      index2 = index2 + 1
    index = index + 1
    if len(removepath) > 0:
      for file in removepath:
        print "remove", file
        os.remove(file)
      dirs = os.listdir(path)
      dirs.sort()
      if len(dirs) <= 0:
        return 0
        # index = 0
  return flag


path = 'pics/'
cmpandremove(path)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
python matplotlib画图实例代码分享
Dec 27 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
详解python中的index函数用法
Aug 06 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
python输出结果刷新及进度条的实现操作
Jul 13 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
如何利用Python matplotlib绘制雷达图
Dec 21 Python
Python Pandas读取Excel日期数据的异常处理方法
Feb 28 Python
python3的print()函数的用法图文讲解
Jul 16 #Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 #Python
在Python函数中输入任意数量参数的实例
Jul 16 #Python
python实现两张图片拼接为一张图片并保存
Jul 16 #Python
Python 实现输入任意多个数,并计算其平均值的例子
Jul 16 #Python
pycharm新建一个python工程步骤
Jul 16 #Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 #Python
You might like
php学习之数据类型之间的转换介绍
2011/06/09 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
PHP跨平台获取服务器IP地址自定义函数分享
2014/12/29 PHP
php文件读取方法实例分析
2015/06/20 PHP
php 查找数组元素提高效率的方法详解
2017/05/05 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript 二分法(数组array)
2010/04/24 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
2017/01/04 Javascript
Bootstrap进度条实现代码解析
2017/03/07 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
2017/07/03 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
浅谈python下tiff图像的读取和保存方法
2018/12/04 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
将python2.7添加进64位系统的注册表方式
2019/11/20 Python
tensorflow 自定义损失函数示例代码
2020/02/05 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
兼职学生的自我评价
2013/11/24 职场文书
违反学校规定检讨书
2014/01/18 职场文书
活动总结怎么写啊
2014/05/07 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL