python实现根据图标提取分类应用程序实例
本文实例讲述了python实现根据图标提取分类应用程序,分享给大家供大家参考。
具体方法如下:
#!/usr/bin/python #-*-coding:utf-8-*- importImage importwin32ui importwin32gui defmake_regalur_image(img,size=(256,256)): returnimg.resize(size).convert('RGB') defsplit_image(img,part_size=(64,64)): w,h=img.size pw,ph=part_size assertw%pw==h%ph==0 return[img.crop((i,j,i+pw,j+ph)).copy()\ foriinxrange(0,w,pw)\ forjinxrange(0,h,ph)] defhist_similar(lh,rh): assertlen(lh)==len(rh) returnsum(1-(0ifl==relsefloat(abs(l-r))/max(l,r))forl,rinzip(lh,rh))/len(lh) defcalc_similar(li,ri): #returnhist_similar(li.histogram(),ri.histogram()) returnsum(hist_similar(l.histogram(),r.histogram())forl,rinzip(split_image(li),split_image(ri)))/16.0 defcalc_similar_by_path(lf,rf): li,ri=make_regalur_image(Image.open(lf)),make_regalur_image(Image.open(rf)) returncalc_similar(li,ri) defmake_doc_data(lf,rf): li,ri=make_regalur_image(Image.open(lf)),make_regalur_image(Image.open(rf)) li.save(lf+'_regalur.png') ri.save(rf+'_regalur.png') fd=open('stat.csv','w') fd.write('\n'.join(l+','+rforl,rinzip(map(str,li.histogram()),map(str,ri.histogram())))) #print>>fd,'\n' #fd.write(','.join(map(str,ri.histogram()))) fd.close() importImageDraw li=li.convert('RGB') draw=ImageDraw.Draw(li) foriinxrange(0,256,64): draw.line((0,i,256,i),fill='#ff0000') draw.line((i,0,i,256),fill='#ff0000') li.save(lf+'_lines.png') defgetIcon(filename): large,small=win32gui.ExtractIconEx(filename,0)# win32gui.DestroyIcon(small[0]) hdc=win32ui.CreateDCFromHandle(win32gui.GetDC(0)) hbmp=win32ui.CreateBitmap() hbmp.CreateCompatibleBitmap(hdc,32,32) hdc=hdc.CreateCompatibleDC() hdc.SelectObject(hbmp) hdc.DrawIcon((0,0),large[0]) hbmp.SaveBitmapFile(hdc,"save.bmp") if__name__=='__main__': #path=r'test/TEST%d/%d.JPG' foriinrange(1,4): getIcon(r'test/TEST1/%d.exe'%i) print'RESULT:%d'%(calc_similar_by_path('save.bmp',r"test/TEST1/backup.bmp")*100) #foriinxrange(1,7): #print'test_case_%d:%.3f%%'%(i,\ #calc_similar_by_path('test/TEST%d/%d.JPG'%(i,1),'test/TEST%d/%d.JPG'%(i,2))*100) #make_doc_data('test/TEST4/1.JPG','test/TEST4/2.JPG')
希望本文所述对大家的Python程序设计有所帮助。