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执行get提交的方法
Apr 29 Python
分析Python中设计模式之Decorator装饰器模式的要点
Mar 02 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
python字符串过滤性能比较5种方法
Jun 22 Python
速记Python布尔值
Nov 09 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
May 05 Python
Python中常用的内置方法
Jan 28 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Python读写csv文件流程及异常解决
Oct 20 Python
Python try except finally资源回收的实现
Jan 25 Python
pycharm进入时每次都是insert模式的解决方式
Feb 05 Python
用Python将GIF动图分解成多张静态图片
Jun 11 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP结合Ueditor并修改图片上传路径
2016/10/16 PHP
如何判断php mysqli扩展类是否开启
2016/12/24 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
php swoft框架实例用法
2020/12/22 PHP
js DataSet数据源处理代码
2010/03/29 Javascript
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
javascript中定义类的方法详解
2015/02/10 Javascript
javascript类型系统 Window对象学习笔记
2016/01/07 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
vue+iview写个弹框的示例代码
2017/12/05 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
浅谈Python单向链表的实现
2015/12/24 Python
Eclipse中Python开发环境搭建简单教程
2016/03/23 Python
你应该知道的python列表去重方法
2017/01/17 Python
Python下载网络小说实例代码
2018/02/03 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
tornado+celery的简单使用详解
2019/12/21 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
质检员岗位职责
2013/12/17 职场文书
创业计划书六个要素
2013/12/26 职场文书
预备党员思想汇报范文
2013/12/29 职场文书
卫生巾广告词
2014/03/18 职场文书
物理教育专业求职信
2014/06/25 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书