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版的文曲星猜数字游戏代码
Sep 02 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
Django中信号signals的简单使用方法
Jul 04 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
pycharm如何实现跨目录调用文件
Feb 28 Python
python小白学习包管理器pip安装
Jun 09 Python
python不同系统中打开方法
Jun 23 Python
python实现大文本文件分割成多个小文件
Apr 20 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不用正则采集速度探究总结
2008/03/24 PHP
php下载远程文件类(支持断点续传)
2008/11/14 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
JavaScipt基本教程之JavaScript语言的基础
2008/01/16 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
2014/03/12 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
python 生成器协程运算实例
2017/09/04 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
pytorch 固定部分参数训练的方法
2019/08/17 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
python实现猜单词游戏
2020/05/22 Python
武汉瑞得软件笔试题
2015/10/27 面试题
某同学的自我鉴定范文
2013/12/26 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
安全演讲稿大全
2014/05/09 职场文书
2014年公路养护工作总结
2014/12/04 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年市场部工作总结
2015/04/30 职场文书
学习十八大的感悟
2015/08/11 职场文书
学生会部长竞选稿
2015/11/19 职场文书
详解如何用Python实现感知器算法
2021/06/18 Python
SpringBoot详解自定义Stater的应用
2022/07/15 Java/Android