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模拟enum枚举类型的方法小结
Apr 30 Python
使用Python生成url短链接的方法
May 04 Python
详细解析Python中__init__()方法的高级应用
May 11 Python
Python 爬虫的工具列表大全
Jan 31 Python
Python语言的变量认识及操作方法
Feb 11 Python
解决python os.mkdir创建目录失败的问题
Oct 16 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
Python字符串匹配之6种方法的使用详解
Apr 08 Python
python matplotlib拟合直线的实现
Nov 19 Python
使用python的pyplot绘制函数实例
Feb 13 Python
Python importlib动态导入模块实现代码
Apr 16 Python
python实现PDF中表格转化为Excel的方法
Jun 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
PHP图片处理之图片背景、画布操作
2014/11/19 PHP
PHP Web木马扫描器代码分享
2015/09/06 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
javascript实现复选框全选或反选
2017/02/04 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
angular内置provider之$compileProvider详解
2017/09/27 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
2018/08/16 Javascript
微信小程序之滑动页面隐藏和显示组件功能的实现代码
2020/06/19 Javascript
使用python在本地电脑上快速处理数据
2017/06/22 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
python使用matplotlib绘制热图
2018/11/07 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
基于Python测试程序是否有错误
2020/05/16 Python
大学三年的自我评价
2013/12/25 职场文书
生产部厂长助理职位说明书
2014/03/03 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
元旦寄语大全
2014/04/10 职场文书
协议书怎么写
2014/04/21 职场文书
监察建议书格式
2014/05/19 职场文书
安全承诺书格式
2014/05/21 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2014年接待工作总结
2014/11/26 职场文书
语文复习计划
2015/01/19 职场文书
银行求职自荐信范文
2015/03/04 职场文书
升职自荐信怎么写
2015/03/05 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android