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 相关文章推荐
在Windows系统上搭建Nginx+Python+MySQL环境的教程
Dec 25 Python
基于Python对象引用、可变性和垃圾回收详解
Aug 21 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
Python动态生成多维数组的方法示例
Aug 09 Python
Django 实现购物车功能的示例代码
Oct 08 Python
对python requests的content和text方法的区别详解
Oct 11 Python
Python数据类型之List列表实例详解
May 08 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
在django中图片上传的格式校验及大小方法
Jul 28 Python
pandas数据拼接的实现示例
Apr 16 Python
python 如何在测试中使用 Mock
Mar 01 Python
pandas求平均数和中位数的方法实例
Aug 04 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php分页函数完整实例代码
2014/09/22 PHP
JS之小练习代码
2008/10/12 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
浅谈Python处理PDF的方法
2017/11/10 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
英国家用电器购物网站:Hughes
2018/02/23 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
如何安装ruby on rails
2014/02/09 面试题
医学生个人求职信范文
2013/09/24 职场文书
充分就业社区汇报材料
2014/05/07 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL