怎么在python中使用opencv對目錄中的圖片去重?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)公司于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目網(wǎng)站設(shè)計、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元巨鹿做網(wǎng)站,已為上家服務,為巨鹿各地企業(yè)和個人服務,聯(lián)系電話:13518219792版本:
平臺:ubuntu 14 / I5 / 4G內(nèi)存
python版本:python2.7
opencv版本:2.13.4
依賴:
如果系統(tǒng)沒有python,則需要進行安裝
sudo apt-get install python
sudo apt-get install python-dev
sudo apt-get install python-pip
sudo pip install numpy mathplotlib
sudo apt-get install libcv-dev
sudo apt-get install python-opencv
使用感知哈希算法進行圖片去重
原理:對每個文件進行遍歷所有進行去重,因此圖片越多速度越慢,但是可以節(jié)省手動操作
感知哈希原理:
1、需要比較的圖片都縮放成8*8大小的灰度圖
2、獲得每個圖片每個像素與平均值的比較,得到指紋
3、根據(jù)指紋計算漢明距離
5、如果得出的不同的元素小于5則為相同(相似?)的圖片
#!/usr/bin/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 def main(argv): if len(argv) <= 1: print "command error" return -1 if os.path.exists(argv[1]) is False: return -1 path = argv[1] ''' while True: if cmpandremove(path) == 0: break ''' cmpandremove(path) return 0 if __name__ == '__main__': main(sys.argv)
為了節(jié)省操作,遍歷所有目錄,把想要去重的目錄遍歷一遍
#!/bin/bash indir=$1 addcount=0 function intest() { for file in $1/* do echo $file if test -d $file then ~/similar.py $file/ intest $file fi done } intest $indir
關(guān)于怎么在python中使用opencv對目錄中的圖片去重問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道了解更多相關(guān)知識。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站標題:怎么在python中使用opencv對目錄中的圖片去重-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article24/cdecje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、域名注冊、云服務器、商城網(wǎng)站、手機網(wǎng)站建設(shè)、服務器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容