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

本文实例讲述了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 文本分类实例、用python实现文本分类、python实现文本提取、python实例、python脚本实例,以便于您获取更多的相关知识。

时间: 2024-11-03 02:19:12

python实现根据图标提取分类应用程序实例_python的相关文章

Python实现简单的可逆加密程序实例_python

本文实例讲述了Python实现简单的可逆加密程序.分享给大家供大家参考.具体如下: Python代码如下: 复制代码 代码如下: #coding=utf-8   '''''      Description: 可逆的加密与解密      Environment: python2.5.x      Author:idehong@gmail.com  ''' import os   import sys   class Code(object):       '''''可逆的加密与解密'''    

python在windows下实现备份程序实例_python

很多书籍里面讲的Python备份都是在linux下的,而在xp上测试一下也可以执行备份功能,代码都差不多相同,就是到执行打包的时候是不一样的.而且要用到winrar,其他的压缩文件也是一样的. 首先我们要把winrar的路径添加到path里面,这里添加完了要重启机子才有效. 这里要注意:把winrar的路径添加到path里面之后一定要重启,否则path的设定不会起作用,打包就会失败!  这里用到得命令是:winrar a xxx.zip xxxx xxx为任意字符   实例代码如下: #备份脚本

python 循环while和for in简单实例_python

python 循环while和for in简单实例 #!/uer/bin/env python # _*_ coding: utf-8 _*_ lucknumber = 5 b = 0 while b <3: print('guss count:',b) a = int(input('you guse number')) if a > lucknumber: print ('youaerbiger') elif a == lucknumber: print ('youare righet')

python实现的重启关机程序实例_python

本文实例讲述了Python实现的重启关机程序的方法,对Python程序设计有一定的参考价值.具体方法如下: 实例代码如下: #!/usr/bin/python #coding=utf-8 import time from os import system runing = True while runing: input = raw_input('关机(s)OR重启(r)?(q退出)') input = input.lower() if input == 'q' or input =='quit

Python中使用wxPython开发的一个简易笔记本程序实例_python

一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets的Python封装和Python模块的方式提供给用户的. 二.安装 参考官方网站:http://www.wxpython.org/download.php 三.DEMO 本demo是一个简单的记事本软件,可以打开文件,修改并保存. import wx app = wx.App() win = wx.

用python实现面向对像的ASP程序实例_python

本文实例讲述了用python实现面向对像的ASP程序的方法.分享给大家供大家参考.具体实现方法如下: 平时我们写ASP时,一般都用vbscript或javascript. javascript是用function来实现类的,很麻烦,而且效果不爽. vbscript虽然可以实现类,但是功能上也有很大的局限性. 如果用python来写ASP脚本,就可以实现真的类,成为真正的面向对像.请看下面的例子: 复制代码 代码如下: <%@LANGUAGE="python" CODEPAGE=&

Python中使用Tkinter模块创建GUI程序实例_python

使用Tkinter模块来创建简单的GUI程序. Tkinter的Widgets有:Button.Canvas.Checkbutton.Entry.Frame.Label.Listbox.Menu.Menubutton.Message.Radiobutton.Scales.Scrollbar.TEXT.Toplevel等. 例: 复制代码 代码如下: # This program displays an empty window. import Tkinter def main():   main

python计算书页码的统计数字问题实例_python

本文实例讲述了python计算书页码的统计数字问题,是Python程序设计中一个比较典型的应用实例.分享给大家供大家参考.具体如下: 问题描述:对给定页码n,计算出全部页码中分别用到多少次数字0,1,2,3,4...,9 实例代码如下: def count_num1(page_num): num_zero = 0 num_one = 0 num_two = 0 num_three = 0 num_four = 0 num_five = 0 num_six = 0 num_seven = 0 nu

Python的Tornado框架异步编程入门实例_python

Tornado Tornado 是一款非阻塞可扩展的使用Python编写的web服务器和Python Web框架, 可以使用Tornado编写Web程序并不依赖任何web服务器直接提供高效的web服务.所以Tornado不仅仅是一个web框架而且还是一款可以用于生产环境的高效的web服务器 Torando 在Linux和FreeBSD上使用高效的异步I/O模型 epoll 和kqueue来实现高效的web服务器, 所以 tornado在Linux上和FreeBSD系列性能可以达到最高接口 当然我