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中ConfigParse模块的用法
Sep 29 Python
Python实现的批量下载RFC文档
Mar 10 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
python库matplotlib绘制坐标图
Oct 18 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
Python unittest单元测试框架及断言方法
Apr 15 Python
python如何输出反斜杠
Jun 18 Python
python 决策树算法的实现
Oct 09 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 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
虫族 Zerg 热键控制
2020/03/14 星际争霸
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
PHP中使用循环实现的金字塔图形
2014/11/08 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
javascript 获取select下拉列表值的代码
2009/09/07 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
Javascript 修改String 对象 增加去除空格功能(示例代码)
2013/11/30 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
2015/12/11 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
js实现常见的工具条效果
2017/03/02 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
redux-saga 初识和使用
2018/03/10 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
python装饰器常见使用方法分析
2019/06/26 Python
python如何读取bin文件并下发串口
2019/07/05 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
多个python文件调用logging模块报错误
2020/02/12 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
python实现学生信息管理系统源码
2021/02/22 Python
安德玛菲律宾官网:Under Armour菲律宾
2020/07/28 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
创意广告词
2014/03/17 职场文书
消防安全责任书
2014/04/14 职场文书
主要负责人任命书
2014/06/06 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
2015选调生工作总结
2015/07/24 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
浅谈Python协程asyncio
2021/06/20 Python
浅谈Python魔法方法
2021/06/28 Java/Android