在MayaVi中保存多个图像



我想渲染大约500张图像并将它们保存到不同的png文件中,因此我编写了一个小类,其中包含我的数据集和renderfunction

from mayavi import mlab
mlab.options.offscreen=True
class Dataset(object):
    def __init__(self):
        some init stuff etc
                 .
                 .
                 .
                 .
    def save_current_frame_to_png(self, filename):
        mlab.contour3d(self.frame_data, contours =30, opacity=0.2) 
        mlab.savefig(filename)
        mlab.clf()
        mlab.close()
        gc.collect()
    def create_movie_files(self):
        folder_name = "animation"
        try:
            os.makedirs(folder_name)
        except OSError:
            raise OSError("Directory already exists.")
        self.__go_to_first_frame()
        for i in range(self.frames):
            filename = "".join([folder_name, "/%.5i" % i, ".png"])
            print filename
            self.save_current_frame_to_png(filename)
            self.read_single_frame()
        self.__go_to_first_frame()

所以一切似乎工作得很好,但我看到内存使用上升直到系统崩溃。所以我试图使用mlab.clf()gc.collect()来保持我的内存低,这不起作用。我找到了一个解决方案,mlab.close()似乎适用于内存使用,但这带来了一个新的问题。每次渲染新图像时,mayavi也会创建一个新窗口,所以之后大约200个窗口时程序崩溃。也许有可能完全禁用窗口?在我看来,mlab.options.offscreen=True只禁用当前窗口内的绘图。

编辑:self.frame_data是一个形状为(100,100,100)的numpy数组,self.read_single_frame()只是从文本文件中读取下一帧并将其存储在self.frame_data中。这个函数不会增加内存,如果我关闭渲染,内存使用量保持在1.2%。

你应该隐藏mlab.show()而保留mlab.close()。

相关内容

  • 没有找到相关文章

最新更新