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将人民币转换大写的脚本代码
Feb 10 Python
Python中的CURL PycURL使用例子
Jun 01 Python
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python求最大值最小值方法总结
Jun 25 Python
PIL图像处理模块paste方法简单使用详解
Jul 17 Python
python通过移动端访问查看电脑界面
Jan 06 Python
Python求解排列中的逆序数个数实例
May 03 Python
pip install命令安装扩展库整理
Mar 02 Python
Django中的JWT身份验证的实现
May 07 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
php获取图片信息的方法详解
2015/12/10 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
列表内容的选择
2006/06/30 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
jQuery CSS()方法改变现有的CSS样式
2014/08/20 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
jQuery.each使用详解
2015/07/07 Javascript
form+iframe解决跨域上传文件的方法
2016/11/18 Javascript
用JavaScript实现让浏览器停止载入页面的方法
2017/01/19 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python获取命令行输入参数列表的实例代码
2018/06/23 Python
python事件驱动event实现详解
2018/11/21 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
python tornado修改log输出方式
2019/11/18 Python
python中数据库like模糊查询方式
2020/03/02 Python
python list的index()和find()的实现
2020/11/16 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
人事经理岗位职责
2014/04/28 职场文书
导游词范文
2015/02/13 职场文书
观看《信仰》心得体会
2016/01/15 职场文书