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展示动态规则法用以解决重叠子问题的示例
Apr 02 Python
Python 多线程实例详解
Mar 25 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
使用tensorflow实现AlexNet
Nov 20 Python
Tensorflow卷积神经网络实例
May 24 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
pandas 实现字典转换成DataFrame的方法
Jul 04 Python
Django中数据库的数据关系:一对一,一对多,多对多
Oct 21 Python
python使用KNN算法识别手写数字
Apr 25 Python
pycharm 激活码及使用方式的详细教程
May 12 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
Discuz! Passport 通行证整合
2008/03/27 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
yii框架中的Url生产问题小结
2012/01/16 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
用js实现控制内容的向上向下滚动效果
2007/06/26 Javascript
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
JQuery Tips(4) 一些关于提高JQuery性能的Tips
2009/12/19 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
js每隔5分钟执行一次ajax请求的实现方法
2013/11/27 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
js 模式窗口(模式对话框和非模式对话框)的使用介绍
2014/07/17 Javascript
jquery 构造函数在表单提交过程中修改数据
2015/05/25 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
jQuery实现简易的天天爱消除小游戏
2015/10/16 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
详解微信小程序调用支付接口支付
2019/04/28 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
2019/05/16 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
JavaScript浅层克隆与深度克隆示例详解
2020/09/01 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
在 Python 应用中使用 MongoDB的方法
2017/01/05 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
物流管理专业毕业生求职信
2014/03/23 职场文书
邹越演讲观后感
2015/06/15 职场文书
2015年教务主任工作总结
2015/07/22 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
MySQL 8.0 Online DDL快速加列的相关总结
2021/06/02 MySQL