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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
python输出指定月份日历的方法
Apr 23 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
Django日志模块logging的配置详解
Feb 14 Python
python3 判断列表是一个空列表的方法
May 04 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 Python
Python FtpLib模块应用操作详解
Dec 12 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
js下用eval生成JSON对象
2010/09/17 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
javascript函数作用域学习示例(js作用域)
2014/01/13 Javascript
JavaScript中实现异步编程模式的4种方法
2014/09/24 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
JS闭包经典实例详解
2018/12/20 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
[10:49]2014国际邀请赛 叨叨刀塔第二期为真正的电竞喝彩
2014/07/21 DOTA
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python小程序实现刷票功能详解
2019/07/17 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
个人简历自我评价八例
2013/10/31 职场文书
科研先进个人典型材料
2014/01/31 职场文书
给朋友的道歉短信
2015/05/12 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB