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对Json的解析
Feb 14 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
Django中的用户身份验证示例详解
Aug 07 Python
Ubuntu16.04安装python3.6.5步骤详解
Jan 10 Python
jupyter note 实现将数据保存为word
Apr 14 Python
基于python实现模拟数据结构模型
Jun 12 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
Python 列表反转显示的四种方法
Nov 16 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 Python
python中numpy.empty()函数实例讲解
Feb 05 Python
python Protobuf定义消息类型知识点讲解
Mar 02 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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读取二进制流(C语言结构体struct数据文件)的深入解析
2013/06/13 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
超酷的网页音乐播放器DewPlayer使用方法
2010/12/18 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
2011/08/23 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
全面了解函数声明与函数表达式、变量提升
2016/08/09 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
详解JS中遍历语法的比较
2017/04/07 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
对layui中表单元素的使用详解
2018/08/15 Javascript
React中使用UEditor百度富文本的方法
2018/08/22 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
javascript实现多边形碰撞检测
2020/10/24 Javascript
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
Python笔记之观察者模式
2019/11/20 Python
简单了解python关键字global nonlocal区别
2020/09/21 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
车间副主任岗位职责
2013/12/24 职场文书
护士求职信
2014/07/05 职场文书
个人委托书范本
2014/09/13 职场文书
歌剧魅影观后感
2015/06/05 职场文书
陈斌强事迹观后感
2015/06/17 职场文书
2019年亲子运动会口号
2019/10/11 职场文书
python3操作redis实现List列表实例
2021/08/04 Python