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中dict与set的使用
Aug 10 Python
Python对多属性的重复数据去重实例
Apr 18 Python
在Python中分别打印列表中的每一个元素方法
Nov 07 Python
在python中对变量判断是否为None的三种方法总结
Jan 23 Python
使用python Telnet远程登录执行程序的方法
Jan 26 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
Python骚操作之动态定义函数
Mar 26 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
Apr 29 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
Python 实现数组相减示例
Dec 27 Python
python实现简单俄罗斯方块
Mar 13 Python
Python OpenCV超详细讲解基本功能
Apr 02 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程序
2006/10/09 PHP
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php计算十二星座的函数代码
2012/08/21 PHP
php session_decode函数用法讲解
2019/05/26 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
jQuery根据用户电脑是mac还是pc加载对应样式的方法
2015/06/26 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
解决node修改后需频繁手动重启的问题
2018/05/13 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
通过python下载FTP上的文件夹的实现代码
2013/02/10 Python
基于python编写的微博应用
2014/10/17 Python
Python常用字符串替换函数strip、replace及sub用法示例
2018/05/21 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
python的flask框架难学吗
2020/07/31 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
社区义诊活动总结
2014/04/30 职场文书
档案保密承诺书
2014/06/03 职场文书