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获取指定目录下所有文件名列表的方法
May 20 Python
CentOS中升级Python版本的方法详解
Jul 10 Python
Django数据库表反向生成实例解析
Feb 06 Python
Python实现多进程的四种方式
Feb 22 Python
python pytest进阶之fixture详解
Jun 27 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
python3.7.3版本和django2.2.3版本是否可以兼容
Sep 01 Python
利于python脚本编写可视化nmap和masscan的方法
Dec 29 Python
Python 实现一个简单的web服务器
Jan 03 Python
pandas中DataFrame数据合并连接(merge、join、concat)
May 30 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编程语言开发动态WAP页面
2006/10/09 PHP
PHP5中使用DOM控制XML实现代码
2010/05/07 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php网页病毒清除类
2014/12/08 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
jquery 图片预加载 自动等比例缩放插件
2008/12/25 Javascript
javascript 类定义的4种方法
2009/09/12 Javascript
JSON.parse 解析字符串出错的解决方法
2010/07/08 Javascript
火狐下table中创建form导致两个table之间出现空白
2013/09/02 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
Python列表删除的三种方法代码分享
2017/10/31 Python
30秒轻松实现TensorFlow物体检测
2018/03/14 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
python实现二分类和多分类的ROC曲线教程
2020/06/15 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
Notino瑞典:购买香水和美容产品
2019/07/26 全球购物
师范生自荐信
2013/10/27 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
活动总结报告范文
2014/05/04 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
JavaScript数组 几个常用方法总结
2021/11/11 Javascript