我需要在PIL Image对象上动态绘制形状,并根据用户输入更改这些形状。为此,删除PIL图像上的先前图形将很有帮助。我正在使用Jupyter笔记本电脑来使用display()
功能。
我已经找到了一种解决方法,其中包括在内存中保存图像的两个副本(im
和im_draw
),并通过添加绘图来修改im_draw
,然后显示im_draw
,然后分配im_draw = im.copy()
,但这绝对不是一个很好的解决方案。
from PIL import Image, ImageDraw
from skimage import data
from IPython.display import display
im = Image.fromarray(data.astronaut()) # This is an example image but you could use Image.open('eg_image.jpg')
display(im)
# Draw the rectangle on im_draw
draw = ImageDraw.Draw(im)
draw.rectangle((120, 120, 380, 380), width=10, outline='red')
display(im)
# I would like to erase the drawing here, if possible, e.g.
# im.erase_drawing(), such that display(im) showed the original image
#########################
# Temporary workaround; Alternative Approach
im = Image.fromarray(data.astronaut())
im_draw = im.copy()
# Draw the rectangle on im_draw
draw = ImageDraw.Draw(im_draw)
draw.rectangle((120, 120, 380, 380), width=10, outline='green')
display(im_draw)
im_draw = im.copy() # Resets im_draw to im
display(im_draw)
另一种方法可行,但是会占用更多的内存,理想情况下,我只能从im
删除图形。如果您对此有任何想法,请告诉我。