Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何擦除在PIL图像上绘制的图形?_Python_Python Imaging Library - Fatal编程技术网

Python 如何擦除在PIL图像上绘制的图形?

Python 如何擦除在PIL图像上绘制的图形?,python,python-imaging-library,Python,Python Imaging Library,我需要在PIL图像对象上动态绘制形状,并根据用户输入更改这些形状。为此,删除PIL图像上以前的图形将很有帮助。我正在Jupyter笔记本电脑中使用display()功能 我已经找到了一种解决方法,包括在内存中保留两个图像副本(im和im\u-draw),通过添加图形修改im\u-draw,然后显示im\u-draw,然后分配im\u-draw=im.copy(),但这绝对不是一个优雅的解决方案 从PIL导入图像,ImageDraw 从浏览导入数据 从IPython.display导入显示 im=

我需要在PIL图像对象上动态绘制形状,并根据用户输入更改这些形状。为此,删除PIL图像上以前的图形将很有帮助。我正在Jupyter笔记本电脑中使用
display()
功能

我已经找到了一种解决方法,包括在内存中保留两个图像副本(
im
im\u-draw
),通过添加图形修改
im\u-draw
,然后显示
im\u-draw
,然后分配
im\u-draw=im.copy()
,但这绝对不是一个优雅的解决方案

从PIL导入图像,ImageDraw
从浏览导入数据
从IPython.display导入显示
im=Image.fromarray(data.audion())#这是一个示例图像,但可以使用Image.open('eg_Image.jpg'))
显示(im)
#在im_Draw上绘制矩形
draw=ImageDraw.draw(im)
绘制矩形((120120380380),宽度为10,轮廓为红色)
显示(im)
#如果可能的话,我想删除这里的图画。
#im.erase_drawing(),以便显示器(im)显示原始图像
#########################
#临时解决办法;替代方法
im=Image.fromarray(data.automotor())
im_draw=im.copy()
#在im_Draw上绘制矩形
draw=ImageDraw.draw(im\U draw)
绘制矩形((120、120、380、380),宽度=10,轮廓为绿色)
显示(图像绘制)
im_draw=im.copy()#将im_draw重置为im
显示(图像绘制)

另一种方法可行,但内存更为密集,理想情况下,我只能从
im
中删除图形。如果您有什么想法,请告诉我。

如果您使用的是jupyter笔记本电脑,我认为您不必担心复制图片所需的额外内存。@CalvinGodfrey观点很好,但这仍然是一个相关的话题。考虑一下,如果我想将<代码> n>代码>附图应用到一个图像中,而只能从堆栈中删除顶部<代码> m <代码>代码。我不想创建和维护图像的每个状态的副本,因此能够从PIL图像中删除索引或标记的图形将是一个很好的功能。如果您的代码具有代表性,并且您的“图形”是矩形和简单形状,您可以在内存方面更经济地“记住”只要您的基础图像,然后是您绘制的形状列表(如SVG矢量图形,只存储左上角和右下角以及颜色),然后您就可以重新创建您的图像,就像它在任何时候一样。类似的想法在这里。。。