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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
python实现关键词提取的示例讲解
Apr 28 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Python发送邮件封装实现过程详解
May 09 Python
OpenCV实现机器人对物体进行移动跟随的方法实例
Nov 09 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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_xmlhttp 乱码问题解决方法
2009/08/07 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
关于PHP递归算法和应用方法介绍
2013/04/15 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
js实现宇宙星空背景效果的方法
2015/03/03 Javascript
详解JavaScript中常用的函数类型
2015/11/18 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
微信小程序内拖动图片实现移动、放大、旋转的方法
2018/09/04 Javascript
其实你可以少写点if else与switch(推荐)
2019/01/10 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
通过js给网页加上水印背景实例
2019/06/17 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
在VUE style中使用data中的变量的方法
2020/06/19 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
[02:05]2014DOTA2国际邀请赛 BBC外卡赛赛后总结
2014/07/09 DOTA
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
python的依赖管理的实现
2019/05/14 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
django实现后台显示媒体文件
2020/04/07 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
个人简历中自我评价
2014/02/11 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
少先队活动总结
2014/08/29 职场文书
课外访万家心得体会
2014/09/03 职场文书