3D可视化库Mayavi安装和使用

您所在的位置:网站首页 3d如何安装 3D可视化库Mayavi安装和使用

3D可视化库Mayavi安装和使用

2023-08-30 13:21| 来源: 网络整理| 查看: 265

文章目录 1 安装安装1(成功)安装2(失败未解决) 2 Mayavi的PythonAPI实用API记录mayavi.mlab.imshow()mayavi.mlab.mesh()mayavi.mlab.triangular_mesh()mayavi.mlab.points3d()mayavi.mlab.contour3d()

Mayavi的官方文档链接在这里。 1 安装 安装1(成功)

Mayavi的pip安装支持不好,所以用编译好的whl文件来安装。安装方法如下,Mayavi及其测试环境为:

# win10系统 # conda 新建的干净环境 # python版本为3.8 # Mayavi版本为4.7.3

安装命令如下:

conda create -n env_name python=3.8

需要按照如下步骤安装以下文件(含版本):

VTK==8.2Mayavi==4.7.3PyQt5==5.15.4

其中,由于pip3只有VTK9.0以上的版本,所以先下载whl文件再安装。whl下载自Unofficial Windows Binaries for Python Extension Packages,文件名称为:VTK‑8.2.0‑cp38‑cp38‑win_amd64.whl。其中cp38表示python版本为3.8;amd64代表系统为64位系统。安装命令如下:

# 激活环境 conda activate env_name # 先安装VTK pip3 install xxxx路径\VTK‑8.2.0‑cp38‑cp38‑win_amd64.whl # 通过pip安装mayavi pip3 install mayavi==4.7.3 # 通过pip安装PyQt5,默认安装了5.15.4的版本,发现是可用的 pip3 install PyQt5

查询到还有一个可视化数据的包叫做menpo,但是没有做过详细查询,先mark在这里。

安装2(失败未解决)

Mayavi的pip安装支持不好,用编译好的whl文件来安装也失败了。所以用以下方法安装Mayavi。测试环境为:

# win10系统 # conda 新建的干净环境 # python版本为3.7(截至20210721,conda下的Mayavi还不支持python3.7医以上的版本)

新建环境命令如下:

# conda 新建的干净环境,python版本为3.8 conda create -n env_name python=3.7

安装Mayavi命令如下:

# 已经查询到当前最高版本为mayavi==4.7.1 conda install mayavi

实际运行中出现报错:

******************************************************************************** WARNING: Imported VTK version (9.0) does not match the one used to build the TVTK classes (8.2). This may cause problems. Please rebuild TVTK. ********************************************************************************

未解决!

2 Mayavi的PythonAPI

根据Mayavi的文档,Mayavi的基础PythonAPI有以下这些:

from mayavi import mlab # 0D and 1D data mlab.points3d() mlab.plot3d() # 2D data mlab.imshow() mlab.surf() mlab.contour_surf() mlab.mesh() mlab.barchart() mlab.triangular() # 3D data mlab.contour3d() mlab.quiver3d() mlab.flow() volume_slice()

本文只介绍我实际使用到的几种API函数。

实用API记录 from mayavi import mlab # 添加坐标轴 mlab.axes(xlabel='x', ylabel='y', zlabel='z') # 添加外框 p1 = mlab.points3d(x, y, z) # 可以替换成其他图像 mlab.outline(p1) or mlab.outline() # 或者直接这样写也行 # 添加颜色标注 mlab.colorbar()

常用属性值如下:

opacity=1.0 # 不透明度,取值范围0-1。0.0表示完全透明,1.0表示完全不透明 color=(1, 1, 1) # RGB数值,每个数的取值范围均为0-1。例:(1, 1, 1)表示白色。 colormap='hot' # 不同的配色方案,可取的值如下: ''' accent flag hot pubu set2 autumn gist_earth hsv pubugn set3 black-white gist_gray jet puor spectral blue-red gist_heat oranges purd spring blues gist_ncar orrd purples summer bone gist_rainbow paired rdbu winter brbg gist_stern pastel1 rdgy ylgnbu bugn gist_yarg pastel2 rdpu ylgn bupu gnbu pink rdylbu ylorbr cool gray piyg rdylgn ylorrd copper greens prgn reds dark2 greys prism set1 ''' mayavi.mlab.imshow() 函数功能:

将一个二维数组以图片的形式展示出来。

使用方式: from mayavi import mlab img = xxxx # img is a 2D nunmpy array mlab.imshow(img) mlab.show( 效果展示:

imshow

mayavi.mlab.mesh() 函数功能:

将物体表面以网格(mesh)的形式展示出来。

mesh说明:

下图来自千千Sama的文章,直观展示了什么是mesh,原文中有下图gif动画。其中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵。每个网格点需要x、y、z共3个坐标表示。 在这里插入图片描述 但是x、y、z一般都用二维矩阵的形式表示。举个例子:

x = [[0, 1, 2], [0, 1, 2], ] y = [[0, 0, 0], [1, 1, 1], ] z = [[1, 2, 3], [4, 5, 6], ] 表示一共有6个点,是一个3 x 2的网格。其中: x方向有3列:[0, 1, 2] y方向有2行:[0, 1] z的数值表示对应位置上的z轴数值。

在Mayavi文档中解释了如何划分连接方式。

使用方式: from mayavi import mlab # Using numpy array may be better x = [[0, 1, 2], [0, 1, 2], ] y = [[0, 0, 0], [1, 1, 1], ] z = [[1, 2, 1], [-1, -2, -1], ] mlab.mesh(x, y, z) mlab.show( 效果展示: 在这里插入图片描述备注 # 参数:representation = 'wireframe' 可以仅绘制线框。 # 参数:representation = 'surface' 为default值,绘制完整曲面。 mlab.mesh(x, y, z, representation='wireframe', line_width=1.0 ) mayavi.mlab.triangular_mesh() 函数功能:

mlab.mesh函数默认surface是像网格一样连接的,但是面对不规则的surface就没法这样表示了。mlab.triangular_mesh就是通过三角形来表示surface,从而普适其他情况。

使用方式: from mayavi import mlab x = [-1, 0, 0, 0, 1] y = [0, -1, 0, 1, 0] z = [0, 0, 3, 0, 0] triangular = [(2, 0, 1), (2, 1, 3), (2, 3, 4), (2, 4, 0)] mlab.triangular_mesh(x, y, z, triangular) mlab.axes() mlab.outline() mlab.show()

代码解读: 其中,x, y, z定义了5个点:(-1, 0, 0), (0, -1, 0), (0, 0, 3), (0, 1, 0), (1, 0, 0)(竖着看xyz的定义那里)。triangular定义了这些点的连接方式:例如(2, 0, 1)表示序号(index)为2, 0, 1的三个点构成一个三角形。 n多个三角形就构成了一整个surface。

效果展示: triangle_mesh 这篇博客写该函数写的很全面,来自mayavii。 mayavi.mlab.points3d() 函数功能:

将三维离散点以球的形式表示出来。

使用方式:

参考了大蓝鲸-博客园的文章。

from mayavi import mlab # Using numpy array may be better x = [1, 2, 3, 4, 5] y = [1, 2, 3, 4, 5] z = [1, 2, 3, 4, 5] s = [1.5, 4.7, -0.112, -3] def f(x, y, z): return x + y - z mlab.points3d(x, y, z) or mlab.points3d(x, y, z, s) or mlab.points3d(x, y, z, f) mlab.show() 效果展示: mayavi.mlab.contour3d() 函数功能:

将三维Volumtric数据展示出来。

使用方式: from mayavi import mlab import numpy as np img = xxxx # Read in a 3D array # Usage 1 mlab.contour3d(img) mlab.show() # Usage 2 shape_x, shape_y, shape_z = img.shape x = np.linespace(0, 512, num=shape_x) y = np.linespace(0, 512, num=shape_y) z = np.linespace(0, 512, num=shape_z) x, y, z = np.meshgrid(x, y, z, index='ij') mlab.contour3d(x, y, z, img) mlab.show()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3