首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mayavi可以渲染一个透明背景的人物场景吗?

Mayavi可以渲染一个透明背景的人物场景吗?
EN

Stack Overflow用户
提问于 2014-05-17 03:45:02
回答 2查看 5.5K关注 0票数 7

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

EN

回答 2

Stack Overflow用户

发布于 2015-04-03 18:22:46

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

代码语言:javascript
复制
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数组直接保存到文件中

票数 5
EN

Stack Overflow用户

发布于 2015-02-03 17:25:52

不能直接设置透明度。但是,您可以使用背景色(不同于前景色)保存图形,然后使用ImageMagick移除背景

例如

代码语言:javascript
复制
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删除背景

代码语言:javascript
复制
convert pure_beauty.png -transparent white pure_transparent_beauty.png

比如shown here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23703417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档