1import sys 2 3athresh = 100 4border = 20 5 6segf = sys.argv[1] 7if len(sys.argv) > 2: 8 pref = sys.argv[2] 9else: 10 pref = '/tmp/cut' 11rects = [] 12starts = {} 13for l in file(segf).xreadlines(): 14 ls = l.split() 15 if len(ls) == 6 and ls[-1] == 'rect': 16 r = map(int, ls[:4]) 17 area = (r[2] - r[0]) * (r[3] - r[1]) 18 if area > athresh: 19 rpad = [r[0] - border, r[1] - border, r[2] + border, r[3] + border] 20 if not starts.has_key(rpad[1]): 21 starts[rpad[1]] = [] 22 starts[rpad[1]].append(len(rects)) 23 rects.append(rpad) 24inf = sys.stdin 25l = inf.readline() 26if l != 'P5\n': 27 raise 'expected pgm file' 28while 1: 29 l = inf.readline() 30 if l[0] != '#': break 31x, y = map(int, l.split()) 32l = inf.readline() 33 34active = {} 35for j in range(y): 36 if starts.has_key(j): 37 for ix in starts[j]: 38 r = rects[ix] 39 ofn = pref + '%04d.pgm' % ix 40 of = file(ofn, 'w') 41 active[ix] = of 42 print >> of, 'P5' 43 print >> of, r[2] - r[0], r[3] - r[1] 44 print >> of, '255' 45 buf = inf.read(x) 46 for ix, of in active.items(): 47 r = rects[ix] 48 of.write(buf[r[0]:r[2]]) 49 if j == r[3] - 1: 50 of.close() 51 del active[ix] 52 53