Lecture 032. 同一个底图上做干预 · 实现代码
2. 同一个底图上做干预 · 实现代码
按问题继续
RGB规则提框、错误关键词基线、目标/参照/关系与干预
展开完整实现代码
def scene():
img=Image.new('RGB',(160,96),(245,243,236));d=ImageDraw.Draw(img)
def cup(x,color):
d.rounded_rectangle((x+18,31,x+34,52),radius=7,outline=color,width=5)
d.rectangle((x,24,x+25,57),fill=color)
d.ellipse((x,19,x+25,29),fill=color)
cup(15,PALETTE['red']);cup(109,PALETTE['blue'])
d.rectangle((60,65,89,79),fill=PALETTE['brown'])
return np.array(img)
base=scene();occluded=base.copy();occlusion_mask=np.zeros(base.shape[:2],bool);occlusion_mask[16:62,11:53]=True
occluded[occlusion_mask]=(115,118,123)
swapped=base.copy();redmask=np.all(base==PALETTE['red'],axis=-1);bluemask=np.all(base==PALETTE['blue'],axis=-1)
swapped[redmask]=PALETTE['blue'];swapped[bluemask]=PALETTE['red']
assert np.array_equal(base[~occlusion_mask],occluded[~occlusion_mask])
assert np.array_equal(base[~(redmask|bluemask)],swapped[~(redmask|bluemask)])
for label,arr in [('base',base),('target-occluded',occluded),('colors-exchanged',swapped)]:Image.fromarray(arr).save(OUT/('lab15-'+label+'.png'))