python实现根据图标提取分类应用程序实例


Posted in Python onSeptember 28, 2014

本文实例讲述了python实现根据图标提取分类应用程序,分享给大家供大家参考。

具体方法如下:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
 
import Image
 
import win32ui 
import win32gui 
 
def make_regalur_image(img, size = (256, 256)): 
  return img.resize(size).convert('RGB') 
 
def split_image(img, part_size = (64, 64)): 
  w, h = img.size 
  pw, ph = part_size 
   
  assert w % pw == h % ph == 0 
   
  return [img.crop((i, j, i+pw, j+ph)).copy() \
      for i in xrange(0, w, pw) \
      for j in xrange(0, h, ph)] 
 
def hist_similar(lh, rh): 
  assert len(lh) == len(rh) 
  return sum(1 - (0 if l == r else float(abs(l - r))/max(l, r)) for l, r in zip(lh, rh))/len(lh) 
 
def calc_similar(li, ri): 
#  return hist_similar(li.histogram(), ri.histogram()) 
  return sum(hist_similar(l.histogram(), r.histogram()) for l, r in zip(split_image(li), split_image(ri))) / 16.0 
       
 
def calc_similar_by_path(lf, rf): 
  li, ri = make_regalur_image(Image.open(lf)), make_regalur_image(Image.open(rf)) 
  return calc_similar(li, ri) 
 
def make_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 + ',' + r for l, r in zip(map(str, li.histogram()), map(str, ri.histogram())))) 
#  print >>fd, '\n' 
#  fd.write(','.join(map(str, ri.histogram()))) 
  fd.close() 
  import ImageDraw 
  li = li.convert('RGB') 
  draw = ImageDraw.Draw(li) 
  for i in xrange(0, 256, 64): 
    draw.line((0, i, 256, i), fill = '#ff0000') 
    draw.line((i, 0, i, 256), fill = '#ff0000') 
  li.save(lf + '_lines.png') 
   
def getIcon(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' 
  for i in range(1,4): 
    getIcon(r'test/TEST1/%d.exe' % i) 
    print 'RESULT:%d' % (calc_similar_by_path('save.bmp',r"test/TEST1/backup.bmp")*100) 
   
  #for i in xrange(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程序设计有所帮助。

Python 相关文章推荐
Python的Django框架中URLconf相关的一些技巧整理
Jul 18 Python
python实现百万答题自动百度搜索答案
Jan 16 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
Python编程argparse入门浅析
Feb 07 Python
python使用matplotlib模块绘制多条折线图、散点图
Apr 26 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
Python 占位符的使用方法详解
Jul 10 Python
django的csrf实现过程详解
Jul 26 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
Jan 25 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
python实现文字版扫雷
Apr 24 Python
wxPython事件驱动实例详解
Sep 28 #Python
python中的多重继承实例讲解
Sep 28 #Python
python错误处理详解
Sep 28 #Python
python中实现定制类的特殊方法总结
Sep 28 #Python
python之wxPython菜单使用详解
Sep 28 #Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 #Python
python之wxPython应用实例
Sep 28 #Python
You might like
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
javascript 异常处理使用总结
2009/06/21 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
js查错流程归纳
2012/05/04 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
JavaScript阻止事件冒泡示例分享
2014/12/28 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
React快速入门教程
2017/01/17 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
[14:20]刀塔大凶女神互压各路奇葩屌丝
2014/05/16 DOTA
python web框架学习笔记
2016/05/03 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
python通过http下载文件的方法详解
2019/07/26 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
python绘制动态曲线教程
2020/02/24 Python
Windows 下更改 jupyterlab 默认启动位置的教程详解
2020/05/18 Python
Python中常见的数制转换有哪些
2020/05/27 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
英国计算机商店:Technextday
2019/12/28 全球购物
初一学生评语大全
2014/04/24 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
高中语文教材(文学文化常识大全一)
2019/08/13 职场文书
商业计划书之服装
2019/09/09 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android