含有章节索引的中文 文章模板

::-- hoxide [2005-07-29 19:19:46]

PIL

简述 Python的图像处理工具集, 功能比较很强大, 配合Numarray使用, 可以做图像处理.

官方页面: http://www.pythonware.com/products/pil/

例子

用PIL+Numarray处理图像

   1 import Image
   2 from numarray import array
   3 from Gnuplot import Gnuplot
   4 from math import ceil
   5 
   6 imsize = (512, 512)
   7 drt = (( 0,  1), (  1,  1), (  1,  0), (  1, -1),
   8        ( 0, -1), ( -1, -1), ( -1,  0), ( -1,  1))
   9 drt = array(drt)
  10 
  11 def dofile(file, z):
  12     im = Image.open(file)
  13     a = im.getdata()
  14     a = array(a).resize(*imsize)
  15     r = list()
  16     for i in xrange(imsize[0]):
  17         for j in xrange(imsize[1]):
  18             for dx, dy in drt:
  19                 if ( i+dx>=0 and i+dx < imsize[0] and
  20                      j+dy>=0 and j+dy < imsize[1] and
  21                      a[i][j] != a[i+dx][j+dy]):
  22                     r.append((i, j, z))
  23     return r
  24 
  25 def ddfile(file, z):
  26     im = Image.open(file)
  27     a = im.getdata()
  28     a = array(a).resize(*imsize)
  29     r = getedge(a, z)
  30     return r
  31 
  32 def getedge(a, z):
  33     imsize = a.shape
  34     r = list()
  35     try:
  36         for i in xrange(imsize[0]):
  37             for j in xrange(imsize[1]):
  38                 if (a[i,j] == 0):
  39                     #print i,j
  40                     raise StopIteration
  41     except StopIteration:
  42         r.append((i,j, z))
  43     if len(r)==0 :
  44         return None
  45     nd = 0
  46     x, y = i, j
  47     r.append((z, x, y))
  48     while True:
  49         for d in xrange(8):
  50             dd = (nd+d) %8
  51             if a[x+drt[dd][0], y + drt[dd][1]] == 0:
  52                 r.append((x, y, z))
  53                 x, y = (x, y) + drt[dd]
  54                 nd = (dd + 4 +1) %8
  55                 break
  56         if x == i and y == j:
  57             break
  58     return r
  59     
  60 
  61 def out(ofp):
  62     np = 30
  63     for i in xrange(100):
  64         fname = 'abmp/'+str(i)+'.bmp'
  65         r = ddfile(fname, i)
  66         l = len(r)
  67         step = (l-1.0)/np
  68         for i in xrange(np):
  69             x, y, z = r[int(step*i)]
  70             ofp.write("%d\t%d\t%d\n"%(z, y, x))
  71         x, y, z = r[0]
  72         ofp.write("%d\t%d\t%d\n"%(z, y, x))
  73         ofp.write("\n")
  74             
  75 def pointplot():
  76     g = Gnuplot()
  77     g('set pm3d')
  78     g('set hidden3d')
  79     g('splot [0:500] [0:500] [0:500] "oo.dat" w l')
  80     raw_input("Press Enter to continue...")
  81     
  82     
  83 if __name__ == '__main__':
  84     ofp = open('oo.dat', 'w')
  85     out(ofp)
  86     ofp.close()
  87     pointplot()

PythonImagingLibrary (last edited 2009-12-25 07:16:39 by localhost)