含有章节索引的中文 文章模板
::-- hoxide [2005-07-29 19:19:46]
Contents
PIL
简述 Python的图像处理工具集, 功能比较很强大, 配合Numarray使用, 可以做图像处理.
官方页面: http://www.pythonware.com/products/pil/
例子
用PIL+Numarray处理图像
Toggle line numbers
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()