【问题标题】:Can Mayavi render a figure scene with a transparent background?Mayavi 可以渲染具有透明背景的人物场景吗?
【发布时间】:2014-07-05 09:17:15
【问题描述】:

我正在使用 mayavi.mlab 生成网格图,并希望背景不透明度为 0。(或透明)。这可能吗?

【问题讨论】:

  • 您期待什么结果?更准确地说,您希望在这个透明背景下做什么?您是否尝试在其他背景上创建具有某些 3D 渲染对象的图像?或者,也许你想让你的窗口管理器将场景合成到其他背景上?在后处理帮助下,第一种情况可能是可能的。第二个肯定不是。提供更多关于你想要做什么的细节。

标签: python background transparent mayavi


【解决方案1】:

如果您的目标是将 mayavi 图形集成到 matplotlib 图形中,这是可能的。您可以使用 mlab.screenshot 来获取 RGBA 值的 numpy 数组,mlab 将自动将背景像素设置为具有 alpha 0。然后,您可以通过imshow 将此 RGBA 矩阵添加到 matplotlib 图。示例(改编自here):

import numpy as np
from mayavi import mlab
import matplotlib.pyplot as plt
# set up some plotting params
dphi, dtheta = np.pi / 250.0, np.pi / 250.0
[phi, theta] = np.mgrid[0:np.pi + dphi * 1.5:dphi,
                        0:2 * np.pi + dtheta * 1.5:dtheta]
m0, m1, m2, m3 = 4, 3, 2, 3
m4, m5, m6, m7 = 6, 2, 6, 4
r = np.sin(m0 * phi) ** m1 + np.cos(m2 * phi) ** m3 + \
    np.sin(m4 * theta) ** m5 + np.cos(m6 * theta) ** m7
x = r * np.sin(phi) * np.cos(theta)
y = r * np.cos(phi)
z = r * np.sin(phi) * np.sin(theta)
# do the meshplot    
fig = mlab.figure(size=(480, 340))
mlab.mesh(x, y, z, colormap='cool', figure=fig)
imgmap = mlab.screenshot(figure=fig, mode='rgba', antialiased=True)
mlab.close(fig)
# do the matplotlib plot
fig2 = plt.figure(figsize=(7, 5))
plt.imshow(imgmap, zorder=4)
plt.plot(np.arange(0, 480), np.arange(480, 0, -1), 'r-')
plt.savefig('example.png')

您也可以使用 plt.imsave(arr=imgmap, fname="foo.png") 将 RGBA 数组直接保存到文件中

【讨论】:

  • 当我运行那个确切的代码时,它不起作用(即 mayavi 图形的背景是灰色而不是透明)。
  • 它对我来说很好用:mayavi 版本4.5.0 & matplotlib 版本1.5.1
【解决方案2】:

您不能直接设置透明度。但是,您可以使用背景颜色(与前景色不同)保存图形并使用 ImageMagick 删除背景

例如

mlab.figure(size = (1024,768),\
            bgcolor = (1,1,1), fgcolor = (0.5, 0.5, 0.5))

# Your fantastic plotting script

mlab.save('pure_beauty.png')

现在使用 ImageMagick 移除背景

convert pure_beauty.png -transparent white pure_transparent_beauty.png

如图所示here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 2011-04-11
    • 2013-11-11
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多