3D可视化库Mayavi安装和使用 |
您所在的位置:网站首页 › 3d如何安装 › 3D可视化库Mayavi安装和使用 |
文章目录
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( 效果展示:将物体表面以网格(mesh)的形式展示出来。 mesh说明:下图来自千千Sama的文章,直观展示了什么是mesh,原文中有下图gif动画。其中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵,就是坐标矩阵。每个网格点需要x、y、z共3个坐标表示。 在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( 效果展示:![]() 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。 效果展示:![]() 将三维离散点以球的形式表示出来。 使用方式:参考了大蓝鲸-博客园的文章。 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 |