Python 比較兩張圖片的相似百分比
阿新 • • 發佈:2019-01-09
1、比較圖片和目錄下的圖片相似度;
2、圖片放大等比較的幾種方法集合#!C:/Python27 #coding=utf-8 import pytesseract from pytesser import * from PIL import Image,ImageEnhance,ImageFilter import os import fnmatch import re,time import urllib, random #import hashlib def getGray(image_file): tmpls=[] for h in range(0, image_file.size[1]):#h for w in range(0, image_file.size[0]):#w tmpls.append( image_file.getpixel((w,h)) ) return tmpls def getAvg(ls):#獲取平均灰度值 return sum(ls)/len(ls) def getMH(a,b):#比較100個字元有幾個字元相同 dist = 0; for i in range(0,len(a)): if a[i]==b[i]: dist=dist+1 return dist def getImgHash(fne): image_file = Image.open(fne) # 開啟 image_file=image_file.resize((12, 12))#重置圖片大小我12px X 12px image_file=image_file.convert("L")#轉256灰度圖 Grayls=getGray(image_file)#灰度集合 avg=getAvg(Grayls)#灰度平均值 bitls=''#接收穫取0或1 #除去變寬1px遍歷畫素 for h in range(1, image_file.size[1]-1):#h for w in range(1, image_file.size[0]-1):#w if image_file.getpixel((w,h))>=avg:#畫素的值比較平均值 大於記為1 小於記為0 bitls=bitls+'1' else: bitls=bitls+'0' return bitls ''' m2 = hashlib.md5() m2.update(bitls) print m2.hexdigest(),bitls return m2.hexdigest() ''' a=getImgHash(".//testpic//001n.bmp")#圖片地址自行替換 files = os.listdir(".//testpic")#圖片資料夾地址自行替換 for file in files: b=getImgHash(".//testpic//"+str(file)) compare=getMH(a,b) print file,u'相似度',str(compare)+'%'
#!C:/Python27 #coding=utf-8 """ 1、截圖,獲取驗證碼圖片; 2、裁剪驗證碼為4個小圖片; 3、把4張圖片放大為255*255畫素圖 4、拿每塊小圖片去模型目錄找相似的圖片*4次; 5、組裝成字串--->4位驗證碼 """ import os ,sys import fnmatch import re,time import urllib, random import pytesseract from pytesser import * from PIL import Image,ImageDraw def GetVerficode(): #下載驗證碼圖片 for i in range(1,101): url = 'https://cas.sf-express.com/cas/imgcode?a=0.7860542547321294' print "download", i file("./code/%04d.jpg" % random.randrange(10000), "wb").write(urllib.urlopen(url).read()) def GetImg(): ImgPath = (".//code//9911.jpg") def CutCrop():#分隔驗證圖片 """global data 全域性變數在整個函式中有效""" ImgPath = (".//code//") j = 1000 for f in os.listdir(ImgPath): if f.endswith(".jpg"): print f img = Image.open(ImgPath+f).convert('L') print img.size w, h = img.size #rowheight = h // rownum #colwidth = w // colnum #imgry.show() for i in range(4): x = 10 + i*24 #驗證碼的x,y座標 y = 6 img.crop((x-4, y,x+6, y+14)).save("font/%d.bmp" % j) print "j=",j j += 1 def fixed_size(): """按照固定尺寸放大處理4圖片""" dirpath =(".//font//") j = 10000 for imgfile in os.listdir(dirpath): print imgfile im = Image.open(dirpath+imgfile) #im.show() size = (256, 256) im2 =im.resize(size).convert('RGB') out = im2.resize(size,Image.ANTIALIAS) out.save(dirpath+'%d.bmp' % j) print u"\n按固定尺寸放大*4張圖片,處理已完成" j += 1 """對比圖片方法開始""" def getGray(image_file): tmpls=[] for h in range(0, image_file.size[1]):#h for w in range(0, image_file.size[0]):#w tmpls.append( image_file.getpixel((w,h)) ) return tmpls def getAvg(ls):#獲取平均灰度值 return sum(ls)/len(ls) def getMH(a,b):#比較100個字元有幾個字元相同 dist = 0; for i in range(0,len(a)): if a[i]==b[i]: dist=dist+1 return dist def getImgHash(fne): image_file = Image.open(fne) # 開啟 image_file=image_file.resize((12, 12))#重置圖片大小我12px X 12px image_file=image_file.convert("L")#轉256灰度圖 Grayls=getGray(image_file)#灰度集合 avg=getAvg(Grayls)#灰度平均值 bitls=''#接收穫取0或1 #除去變寬1px遍歷畫素 for h in range(1, image_file.size[1]-1):#h for w in range(1, image_file.size[0]-1):#w if image_file.getpixel((w,h))>=avg:#畫素的值比較平均值 大於記為1 小於記為0 bitls=bitls+'1' else: bitls=bitls+'0' return bitls ''' m2 = hashlib.md5() m2.update(bitls) print m2.hexdigest(),bitls return m2.hexdigest() ''' """對比圖片方法結束""" def FindImg(): """ 遍歷Pic 目錄下的圖片,去路徑中找圖片字尾為PNG的圖片,對比 """ file_dir = (".\\BigImg") L=[] for root,dirs,files in os.walk(file_dir): #print root,dirs,files #路徑地址、資料夾名、檔名 for file in files: L.append(os.path.join(root,file)) #if imgfile.endswith(".bmp"): #print L ,len(L) file_dir = (".\\result") M=[] for root, dirs, files in os.walk(file_dir): for file in files: if os.path.splitext(file)[1] == '.bmp': #print os.path.join(root, file) im2 = Image.open(os.path.join(root, file)) #im2.show() M.append(os.path.join(root, file)) #print M,len(M) """外層迴圈4次,內層迴圈多次""" #i = len(L) for i in L : print "\n",i ,"\n" a=getImgHash(i) for j in M: #im2 = Image.open(j) #print j b=getImgHash(j) compare=getMH(a,b) print j,u'相似度',str(compare)+'%' """下載圖片""" #GetVerficode() """裁剪圖片""" #CutCrop() """放大圖片""" #fixed_size() """對比圖片""" FindImg()