Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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
pil-python多图像独立绘制_Python_Python 2.7_Optimization_Python Imaging Library_Draw - Fatal编程技术网

pil-python多图像独立绘制

pil-python多图像独立绘制,python,python-2.7,optimization,python-imaging-library,draw,Python,Python 2.7,Optimization,Python Imaging Library,Draw,我有一个数据库,其中有(x,y)点随时间收集,用于在图像上绘图。为了更好地表示数据,我想在(x,y)坐标上生成图像的帧加上一个圆,当它们出现时。我用下面的代码成功地做到了这一点,但在我看来,这需要花费太多的时间(视频长度为4250帧,必须多次进行,以便进行单独的数据收集)。我正在寻找的是一个可能的优化使用的图像加载最初在内存中,所以它不是再次加载每一帧,而是一劳永逸 subprocess.call(['mkdir', install_path + 'users/' + user.name + '

我有一个数据库,其中有(x,y)点随时间收集,用于在图像上绘图。为了更好地表示数据,我想在(x,y)坐标上生成图像的帧加上一个圆,当它们出现时。我用下面的代码成功地做到了这一点,但在我看来,这需要花费太多的时间(视频长度为4250帧,必须多次进行,以便进行单独的数据收集)。我正在寻找的是一个可能的优化使用的图像加载最初在内存中,所以它不是再次加载每一帧,而是一劳永逸

subprocess.call(['mkdir', install_path + 'users/' + user.name + '/temp'])
# creates a temporary folder for the pngs generated
r = 8

for i in range(0, 4250, 1):
    valaro = Image.open('pngs/valaro_800.png')
    draw = ImageDraw.Draw(valaro)
    for d in data:
        if (d.reeltime + 5) * 25 > i > (d.reeltime - 5) * 25:
            # interpret the data to fit on the picture
            xl = d.x * 2.91 + 392
            yl = d.y * -3.06 + 434

            draw.ellipse((xl - r, yl - r, xl + r, yl + r), fill='green')
    valaro.save('users/' + user.name + '/temp/' + user.name + str(i) + '.png')
提前感谢您的回复

您可以更改

for i in range(0, 4250, 1):
    valaro = Image.open('pngs/valaro_800.png')
…到

original = Image.open('pngs/valaro_800.png')
for i in range(0, 4250, 1):
    valaro = original.copy()
…因此映像只加载一次,但我怀疑这只会带来较小的性能提升。

您可以更改

for i in range(0, 4250, 1):
    valaro = Image.open('pngs/valaro_800.png')
…到

original = Image.open('pngs/valaro_800.png')
for i in range(0, 4250, 1):
    valaro = original.copy()

…因此映像只加载一次,但我怀疑这只会带来较小的性能提升。

感谢您的回复,刚刚测试了差异:在i7 3630QM/16Gio的RAM上获得31秒(2米29秒vs.3米1秒)。实际上还不错,但我不知道我们是否可以用相同的包和语言配置来进一步推动工作。@Xander我怀疑大部分时间都花在
valaro.save()
调用上,如果像你说的那样,它必须将4250个PNG文件写入磁盘。我假设这些文件只是作为另一个创建视频文件的工具的临时输入。根据视频需要的格式,可能有更好的方法。无论哪种方式,如果临时文件存储在.NET上,您可能会获得更显著的性能提升。我使用ffmpeg和覆盖过滤器来显示与原始视频同步的图表上收集的数据。对视频格式没有特别的需求,我可以做封装在.MOV容器中的PNG,但最终MOV/H.264会节省空间。我想我们可以在RAM中生成所有PNG,直接生成MOV/PNG文件,然后在MOV/H.264中重新编码以节省空间。如果python和PIL允许我进行这样的内存操作。@Xander根据输入PNG文件的内容,您可能会得到更小的(无损)结果。如果PNG主要由实心颜色块组成,可以有效地进行渲染,那么通常会得到比AIUI更好的效果,也就是说,H.264的效果。好吧,除了4个笑脸,“valaro”基本上是白色背景上的2轴。RLE似乎是一种很好的可能性,但要叠加的背景视频要复杂得多。但我想ffmpeg可以很容易地处理这两种格式的合成,并且支持APNG解码。因此,图上的数据表示将是APNG,然后将其与ffmpeg合成。非常感谢您的灯光:)感谢您的回复,刚刚测试了差异:在i7 3630QM/16Gio内存上获得31秒(2米29秒vs.3米1秒)。实际上还不错,但我不知道我们是否可以用相同的包和语言配置来进一步推动工作。@Xander我怀疑大部分时间都花在
valaro.save()
调用上,如果像你说的那样,它必须将4250个PNG文件写入磁盘。我假设这些文件只是作为另一个创建视频文件的工具的临时输入。根据视频需要的格式,可能有更好的方法。无论哪种方式,如果临时文件存储在.NET上,您可能会获得更显著的性能提升。我使用ffmpeg和覆盖过滤器来显示与原始视频同步的图表上收集的数据。对视频格式没有特别的需求,我可以做封装在.MOV容器中的PNG,但最终MOV/H.264会节省空间。我想我们可以在RAM中生成所有PNG,直接生成MOV/PNG文件,然后在MOV/H.264中重新编码以节省空间。如果python和PIL允许我进行这样的内存操作。@Xander根据输入PNG文件的内容,您可能会得到更小的(无损)结果。如果PNG主要由实心颜色块组成,可以有效地进行渲染,那么通常会得到比AIUI更好的效果,也就是说,H.264的效果。好吧,除了4个笑脸,“valaro”基本上是白色背景上的2轴。RLE似乎是一种很好的可能性,但要叠加的背景视频要复杂得多。但我想ffmpeg可以很容易地处理这两种格式的合成,并且支持APNG解码。因此,图上的数据表示将是APNG,然后将其与ffmpeg合成。非常感谢您的灯光:)