iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python利用PyVista进行mesh的色彩映射的实现
  • 595
分享到

Python利用PyVista进行mesh的色彩映射的实现

2024-04-02 19:04:59 595人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录PyVista简介PyVista是什么pyvista和其他3D可视化工具比较pyvista使用安装I/O读取及可视化图片类型mesh彩色映射使用pyvista自带的cmp使用Ma

最近项目中需要对mesh做一个色彩映射,无意间发现vtk的封装库pyvista相当好用,就试了试,在此做一个总结。

PyVista简介

PyVista是什么

PyVista 是一个:

  • VTK for humans”, 可视化工具包(VTK)的高级api
  • 空间数据的网格数据结构与滤波方法
  • 使3D绘图更加简单,可用于大型/复杂数据的图像化

PyVista(以前的vtki)是可视化工具包(VTK)的一个助手模块,它采用了一种不同的方法,通过NumPy和直接数组访问与VTK进行接口。这个包提供了一个python化的、文档化良好的接口,展示了VTK强大的可视化后端,以方便对空间引用的数据集进行快速原型化、分析和可视化集成。

该模块可用于演示文稿和研究论文的科学绘图,以及其他依赖网格的Python模块的支持模块。

参考:https://docs.pyvista.org/index.html

GitHub

官方教程

pyvista和其他3D可视化工具比较

在这里插入图片描述

参考:Https://github.com/pyvista/pyvista/issues/146

pyvista使用

安装


pip install pyvista -i https://pypi.tuna.tsinghua.edu.cn/simple

I/O读取及可视化

mesh类型

pyvista支持读取大多数常见的mesh文件类型,比如PLY,VTK,STL ,OBJ ,BYU 等,一些不常见的mesh文件类型,比如FEniCS/Dolfin_ XML fORMat

(很遗憾,pyvista不支持点云PCD格式,不过可以通过pcdpy、pclpy、python-pcl等库来读取pcd文件)


import pyvista as pv
# 读取
mesh = pv.read('pointCloudData/data.vtk')
# 显示
mesh.plot()
# 其他类似
mesh = pv.read('pointCloudData/data.ply')
……

图片类型

支持读取图片类型数据JPEG, TIFF, PNG等


# 读取
image = pv.read('my_image.jpg')
# 显示
image.plot(rgb=True, cpos="xy")

# 其余图片类型类似
……

mesh彩色映射

项目中需要用到根据高度来对mesh进行彩色映射,在pyvista中大概有四种方法

自定义

代码


import pyvista as pv
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
import numpy as np

def mesh_cmp_custom(mesh, name):
 """
 自定义色彩映射
 :param mesh: 输入mesh
 :param name: 比较数据的名字
 :return:
 """
 pts = mesh.points
 mesh[name] = pts[:, 1]
 # Define the colors we want to use
 blue = np.array([12 / 256, 238 / 256, 246 / 256, 1])
 black = np.array([11 / 256, 11 / 256, 11 / 256, 1])
 grey = np.array([189 / 256, 189 / 256, 189 / 256, 1])
 yellow = np.array([255 / 256, 247 / 256, 0 / 256, 1])
 red = np.array([1, 0, 0, 1])

 c_min = mesh[name].min()
 c_max = mesh[name].max()
 c_scale = c_max - c_min

 mapping = np.linspace(c_min, c_max, 256)
 newcolors = np.empty((256, 4))
 newcolors[mapping >= (c_scale * 0.8 + c_min)] = red
 newcolors[mapping < (c_scale * 0.8 + c_min)] = grey
 newcolors[mapping < (c_scale * 0.55 + c_min)] = yellow
 newcolors[mapping < (c_scale * 0.3 + c_min)] = blue
 newcolors[mapping < (c_scale * 0.1 + c_min)] = black

 # Make the colormap from the listed colors
 my_colormap = ListedColormap(newcolors)
 mesh.plot(Scalars=name, cmap=my_colormap)

if __name__ == '__main__':
 mesh = pv.read('pointCloudData/1.ply')
 mesh_cmp_custom(mesh, 'y_height')

效果:

在这里插入图片描述

使用pyvista自带的cmp

函数mesh.plot(scalars=name, cmap='viridis_r')

其中cmap支持的样式:

‘Accent', ‘Accent_r', ‘Blues', ‘Blues_r', ‘BrBG', ‘BrBG_r', ‘BuGn', ‘BuGn_r', ‘BuPu', ‘BuPu_r', ‘CMRmap', ‘CMRmap_r', ‘Dark2', ‘Dark2_r', ‘GnBu', ‘GnBu_r', ‘Greens', ‘Greens_r', ‘Greys', ‘Greys_r', ‘OrRd', ‘OrRd_r', ‘Oranges', ‘Oranges_r', ‘PRGn', ‘PRGn_r', ‘Paired', ‘Paired_r', ‘Pastel1', ‘Pastel1_r', ‘Pastel2', ‘Pastel2_r', ‘PiYG', ‘PiYG_r', ‘PuBu', ‘PuBuGn', ‘PuBuGn_r', ‘PuBu_r', ‘PuOr', ‘PuOr_r', ‘PuRd', ‘PuRd_r', ‘Purples', ‘Purples_r', ‘RdBu', ‘RdBu_r', ‘RdGy', ‘RdGy_r', ‘RdPu', ‘RdPu_r', ‘RdYlBu', ‘RdYlBu_r', ‘RdYlGn', ‘RdYlGn_r', ‘Reds', ‘Reds_r', ‘Set1', ‘Set1_r', ‘Set2', ‘Set2_r', ‘Set3', ‘Set3_r', ‘Spectral', ‘Spectral_r', ‘Wistia', ‘Wistia_r', ‘YlGn', ‘YlGnBu', ‘YlGnBu_r', ‘YlGn_r', ‘YlOrBr', ‘YlOrBr_r', ‘YlOrRd', ‘YlOrRd_r', ‘afmhot', ‘afmhot_r', ‘autumn', ‘autumn_r', ‘binary', ‘binary_r', ‘bone', ‘bone_r', ‘brg', ‘brg_r', ‘bwr', ‘bwr_r', ‘cividis', ‘cividis_r', ‘cool', ‘cool_r', ‘coolwarm', ‘coolwarm_r', ‘copper', ‘copper_r', ‘cubehelix', ‘cubehelix_r', ‘flag', ‘flag_r', ‘GISt_earth', ‘gist_earth_r', ‘gist_gray', ‘gist_gray_r', ‘gist_heat', ‘gist_heat_r', ‘gist_ncar', ‘gist_ncar_r', ‘gist_rainbow', ‘gist_rainbow_r', ‘gist_stern', ‘gist_stern_r', ‘gist_yarg', ‘gist_yarg_r', ‘gnuplot', ‘gnuplot2', ‘gnuplot2_r', ‘gnuplot_r', ‘gray', ‘gray_r', ‘hot', ‘hot_r', ‘hsv', ‘hsv_r', ‘inferno', ‘inferno_r', ‘jet', ‘jet_r', ‘magma', ‘magma_r', ‘nipy_spectral', ‘nipy_spectral_r', ‘ocean', ‘ocean_r', ‘pink', ‘pink_r', ‘plasma', ‘plasma_r', ‘prism', ‘prism_r', ‘rainbow', ‘rainbow_r', ‘seismic', ‘seismic_r', ‘spring', ‘spring_r', ‘summer', ‘summer_r', ‘tab10', ‘tab10_r', ‘tab20', ‘tab20_r', ‘tab20b', ‘tab20b_r', ‘tab20c', ‘tab20c_r', ‘terrain', ‘terrain_r', ‘turbo', ‘turbo_r', ‘twilight', ‘twilight_r', ‘twilight_shifted', ‘twilight_shifted_r', ‘viridis', ‘viridis_r', ‘winter', ‘winter_r'

代码


import pyvista as pv
def mesh_cmp(mesh, name):
 """
  使用进行plot自带的色彩映射
  :param mesh: 输入mesh
  :param name: 比较数据的名字
  :return:
 """
 pts = mesh.points
 mesh[name] = pts[:, 1]
 mesh.plot(scalars=name, cmap='viridis_r')
 
if __name__ == '__main__':
 mesh = pv.read('vtkData/airplane.ply')
 mesh_cmp(mesh, 'y_height')

效果

在这里插入图片描述

使用Matplotlib的cmp

代码


import pyvista as pv
import matplotlib.pyplot as plt

def mesh_cmp_mpl(mesh, name):
 """
  使用Matplotlib进行色彩映射
  :param mesh: 输入mesh
  :param name: 比较数据的名字
  :return:
  """
 pts = mesh.points
 mesh[name] = pts[:, 1]
 mlp_cmap = plt.cm.get_cmap("viridis", 25)
 mesh.plot(scalars=name, cmap=mlp_cmap)
 
if __name__ == '__main__':
 mesh = pv.read('vtkData/airplane.ply')
 mesh_cmp_mpl(mesh, 'y_height')

效果

在这里插入图片描述

使用colorcet的cmp

需要先安装colorcet:


pip install colorcet

使用方法和上面几种方法类似,若想使用colorcet的colormaps中的hot:

mesh.plot(scalars=name, cmap=“hot”)

代码


def mesh_cmp_colorcet(mesh, name):
 """
  使用进行colorcet进行色彩映射
  :param mesh: 输入mesh
  :param name: 比较数据的名字
  :return:
 """
 pts = mesh.points
 mesh[name] = pts[:, 1]
 mesh.plot(scalars=name, cmap=colorcet.fire)
 
if __name__ == '__main__':
 mesh = pv.read('vtkData/airplane.ply')
 mesh_cmp_colorcet(mesh, 'y_height')

效果:

在这里插入图片描述

总结

pyvista相当强大,而且比直接用vtk更加方便(代码量肉眼可见的降低!)

到此这篇关于Python利用PyVista进行mesh的色彩映射的实现的文章就介绍到这了,更多相关PyVista mesh色彩映射内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python利用PyVista进行mesh的色彩映射的实现

本文链接: https://www.lsjlt.com/news/122782.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python利用PyVista进行mesh的色彩映射的实现
    目录PyVista简介PyVista是什么pyvista和其他3D可视化工具比较pyvista使用安装I/O读取及可视化图片类型mesh彩色映射使用pyvista自带的cmp使用Ma...
    99+
    2024-04-02
  • Python中如何利用PyVista进行mesh的色彩映射
    这篇文章给大家分享的是有关Python中如何利用PyVista进行mesh的色彩映射的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PyVista简介PyVista是什么PyVista 是一个:VTK for hu...
    99+
    2023-06-14
  • Python+OpenCV实战之利用 K-Means 聚类进行色彩量化
    目录前言利用 K-Means 聚类进行色彩量化完整代码显示色彩量化后的色彩分布前言 K-Means 聚类算法的目标是将 n 个样本划分(聚类)为 K 个簇,在博文《OpenCV与机器...
    99+
    2024-04-02
  • mybatis中的SQL怎么利用注解进行映射
    今天就跟大家聊聊有关mybatis中的SQL怎么利用注解进行映射,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。结果集分页有时我们需要处理海量数据,由于数据量太大,所以不能一次取出所有...
    99+
    2023-05-31
    mybatis
  • Python+OpenCV中如何利用K-Means 聚类进行色彩量化
    小编给大家分享一下Python+OpenCV中如何利用K-Means 聚类进行色彩量化,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!利用 K-Means...
    99+
    2023-06-21
  • 利用ANSI控制码实现彩色的Windows启动菜单
    电脑启动菜单选项默认一般都是白色的,但我们可以修改C盘根目录下的boot.ini(隐藏文件)可以使用ANSI控制码来控制启动菜单显示出彩色。现在就讲解一下根据以下短短的代码来为自己设计一个彩色的Windows启动菜单。这...
    99+
    2023-05-29
    彩色 windows 启动菜单 菜单 Windows ANSI
  • mybatis中的映射文件怎么利用mapper接口进行加载
    mybatis中的映射文件怎么利用mapper接口进行加载?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。通过 mapper 接口加载映射文件,这对于后面 ssm三大框架 的整合...
    99+
    2023-05-31
    mybatis mapper pp
  • python实现求纯色彩图像的边框
    本文实例为大家分享了python实现求纯色彩图像的边框,供大家参考,具体内容如下 先上效果图,这里显示有点色差, 实际数值是纯色的, 而不是混色的. 放大局部细节看是这样的 原图...
    99+
    2024-04-02
  • python填充彩色图形的实现示例
    目录1.问题描述2.问题分析3.算法设计4.完整的程序5.运行结果1.问题描述 使用turtle绘制填充彩色图形。 2.问题分析 这里我们使用turtle的方法来绘制一座房子和一个太...
    99+
    2023-05-16
    python填充彩色图形 python填充图形
  • python实现求纯色彩图像的边框的方法
    这篇文章主要讲解了“python实现求纯色彩图像的边框的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python实现求纯色彩图像的边框的方法”吧!python是什么意思Python是一...
    99+
    2023-06-14
  • Python OpenCV 彩色与灰度图像的转换实现
    彩色图像转换为灰度图像 第一种方式通过 imread 读取图像的时候直接设置参数为 0 ,自动转换彩色图像为灰度图像 第二种方式,可以通过 split 进行通道分离,或者叫做读取单个...
    99+
    2024-04-02
  • 使用 PHP 函数进行对象关系映射的最佳实践?
    使用 php 函数进行 orm 的最佳实践:声明强类型化变量以确保数据完整性。妥善处理一对一、一对多和多对多关联。通过 where()、orderby() 和其他函数自定义查询...
    99+
    2024-05-01
    php orm
  • 怎么使用MyBatis的注解方式进行SQL映射
    使用MyBatis的注解方式进行SQL映射可以简化代码,不需要编写XML文件。以下是使用MyBatis的注解方式进行SQL映射的步骤...
    99+
    2024-04-09
    MyBatis
  • Python实现打印彩色字符串的方法详解
    目录一行代码突出重点内容彩色打印的公式彩色效果汇总封装,让彩色打印更好用函数封装logging 中的使用第三方库print 也许是我们在使用 Python 的时候用的最多的一种操作,...
    99+
    2024-04-02
  • 有效使用互斥体进行映射的读写操作
    学习Golang要努力,但是不要急!今天的这篇文章《有效使用互斥体进行映射的读写操作》将会介绍到等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!...
    99+
    2024-04-04
  • 使用nginx实现端口映射的教程
    这篇文章主要讲解了“使用nginx实现端口映射的教程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用nginx实现端口映射的教程”吧!考虑这样一个场景,我们部署了若干web应用在一台云服务...
    99+
    2023-06-04
  • python opencv实现灰度图和彩色图的互相转换
    目录opencv灰度图和彩色图互相转换注意:附:python将灰度图转换为RGB彩色图总结opencv灰度图和彩色图互相转换 如果摄像头本来就得到3维度红外图那就不用处理直接可以用:...
    99+
    2024-04-02
  • OpenCV利用K-means实现根据颜色进行图像分割
    目录K-means算法分割应用:分类实例 K-means算法分割 K-means是一种经典的无监督聚类算法---不需要人工干预。 算法原理: (1)随机选择两个中心点; ...
    99+
    2022-11-13
    OpenCV K-means图像分割 OpenCV 图像分割 OpenCV K-means
  • Python如何实现列表映射后的平均值
    这篇文章主要介绍了Python如何实现列表映射后的平均值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、average_bydef average_by(lst,...
    99+
    2023-06-25
  • 利用Python将彩色图像转为灰度图像的两种方法
    目录第一种方法第二种方法python 批量将图片转为灰度图总结第一种方法 Python的cv2库中自带彩色转灰度的方法,而且非常简单,代码就9行,核心代码就1行。 大题思路就是先读取...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作