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中的字符串与字符串的输入输出
Mar 13 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
python使用rpc框架gRPC的方法
Aug 24 Python
使用11行Python代码盗取了室友的U盘内容
Oct 23 Python
python 使用pandas计算累积求和的方法
Feb 08 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
Django Form设置文本框为readonly操作
Jul 03 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
python OpenCV学习笔记
Mar 31 Python
python实现学员管理系统(面向对象版)
Jun 05 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如何实现App常用的秒发功能
2016/08/03 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
javascript 利用arguments实现可变长参数
2016/11/21 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
python调用windows api锁定计算机示例
2014/04/17 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Python devel安装失败问题解决方案
2020/06/09 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
Python实现曲线拟合的最小二乘法
2021/02/19 Python
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
小饰品店的创业计划书范文
2013/12/28 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
防灾减灾标语
2014/10/07 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
家长通知书家长意见
2014/12/30 职场文书
奖学金感谢信
2015/01/21 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
病假证明模板
2015/06/19 职场文书
Django基础CBV装饰器和中间件
2022/03/22 Python