返回 dev

errmap_crop.py

dev/errmap_crop.py · 1.3 KB · 28 行
dev/errmap_crop.py 1.3 KB · 28 行 GitHub
import sys, structfrom PIL import Image# 用法: python dev/errmap_crop.py src.raw out.rgb x y w h scale out.pngsrc, fin, x, y, w, h, sc, out = sys.argv[1], sys.argv[2], *map(int, sys.argv[3:8]), sys.argv[8]with open(src, 'rb') as f:    W = struct.unpack('<i', f.read(4))[0]; H = struct.unpack('<i', f.read(4))[0]    data = f.read()a = Image.frombytes('RGBA', (W, H), data[:W*H*4]).convert('RGB')b = Image.frombytes('RGB', (W, H), open(fin, 'rb').read()[:W*H*3])pa, pb = a.load(), b.load()err = Image.new('RGB', (W, H), (255, 255, 255))pe = err.load()n8 = n20 = 0for yy in range(y, y+h):    for xx in range(x, x+w):        d = max(abs(pa[xx,yy][k]-pb[xx,yy][k]) for k in range(3))        if d > 8: n8 += 1        if d > 20: n20 += 1        pe[xx,yy] = (255,0,0) if d > 20 else ((255,170,0) if d > 8 else (235,235,235))box = (x, y, x+w, y+h)imgs = [a.crop(box).resize((w*sc,h*sc), Image.NEAREST),        b.crop(box).resize((w*sc,h*sc), Image.NEAREST),        err.crop(box).resize((w*sc,h*sc), Image.NEAREST)]sheet = Image.new('RGB', (w*sc*3+16, h*sc), (255,0,255))for i,im in enumerate(imgs): sheet.paste(im, (i*(w*sc+8), 0))sheet.save(out)print(out, '原图 | 成品 | 误差(红>20 橙>8)  err>8:', n8, ' err>20:', n20, ' 占', round(n8/(w*h)*100,2), '%')