在MayaVi中保存多张图像
我想处理大约500张图片,并把它们保存成不同的png文件,所以我写了一个小类,里面包含了我的数据集和一个渲染函数。
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%。
1 个回答
0
你应该把 mlab.show() 隐藏起来,同时保留 mlab.close()。这样就能正常工作了。