【wrl2stl】WRL文件转STL文件-Python

之前有一篇博客写了Avizo自动化批量导出wrl文件:【Avizo&Python】离散颗粒的分割、网格化与单颗粒批量自动保存wrl文件_avizo python-CSDN博客

还有一篇写了wrl转为xyz格式文件:

Wrl文件转XYZ文件-Python_python 打开wrl三维模型-CSDN博客

在这篇博客中,程序仅读取了顶点信息,面片信息直接被丢弃了,这样会丢失一手的网格信息,并不利于后续的数据分析和结构表征。

前几天在用Meshlab的时候,发现可以读取Wrl文件后直接导出stl/obj格式文件:

那就想有没有像Avizo之类的内置python,结果找到了PyMeshLab的官方库:cnr-isti-vclab/PyMeshLab: The open source mesh processing python library

官方手册:PyMeshLab — PyMeshLab documentation

安装方式(Python >= 3.7 (64 bit)):

pip3 install pymeshlab

然后就直接:

# wrl2stl_0913.pyimport pymeshlab
import os
from tqdm import tqdmwrls = []
gel = r'C:\DataSet_DOOR\dataset_3Dbubble\1008-gel-reexport'for root, dirs, files in os.walk(gel):for file in tqdm(files):if file.endswith(".wrl"):wrls = os.path.join(root, file)ms = pymeshlab.MeshSet()ms.load_new_mesh(wrls)wrls = wrls.replace('0802gel', 'mesh')wrls = wrls.replace('wrl', 'stl')# stl_path = os.path.join(gel, '0802gel1-stl', file.replace('wrl', 'stl'))ms.save_current_mesh(wrls)

STL还不可以直接用,存在问题如下:

  1. STL的坐标还是Avizo中的坐标,分布在世界各地,需要进行中心化,将中心坐标移动到原点;
  2. 在一个非常不起眼的角落,存在着一个圆球,每个文件中都存在,尺寸固定。这导致对点坐标计算平均值求的点云中心位置的时候出现很大的偏差,导致中心化失败。这是wrl文件中存在的问题,不一定会遇到,但一定要检查。

罪魁祸首(长得像个病毒😡):

参考以下代码,其中还包括了点云超采样,如果不需要可以删掉。

import os
import cv2
import numpy as np
import pyvista as pv
import matplotlib.pyplot as plt
from tqdm import tqdmdef upsample_point_cloud(points, num_clusters):# 点云上采样,返回mesh的点云数量大于num_clusterscloud = pv.PolyData(points)sample_spacing = 5while(1):mesh = cloud.reconstruct_surface(nbr_sz = 10, sample_spacing = sample_spacing)# 提取顶点作为新的点云new_points = np.asarray(mesh.points)if new_points.shape[0] < num_clusters * 1.1:sample_spacing *= 0.9else:breakreturn meshstl_folder = r"C:\DataSet_DOOR\dataset_3Dbubble\1008-gel-reexport\mesh1-filter"
# stl_folder = r"C:\DataSet_DOOR\dataset_3Dbubble\1008-gel-reexport\mesh2-filter"# 保存点到文件
progress1 = tqdm(os.listdir(stl_folder), dynamic_ncols=True, desc="Read STL", leave=True)
for stl_file in progress1:if stl_file.endswith(".stl"):stl_path = os.path.join(stl_folder, stl_file)mesh = pv.read(stl_path)points = np.array(mesh.points, dtype=float)distance_to_origin = np.linalg.norm(points, axis=1)# 筛出异常球points = points[distance_to_origin >= 100] / 1000000points -= np.mean(points, axis=0)# plotter = pv.Plotter()# actor = plotter.add_points(points, color = '#c8c8ff')# actor = plotter.add_points(np.array([0, 0, 0]), color = '#f14c36')# actor = plotter.show_bounds(grid='back',#             location='outer',#             ticks='both',#             n_xlabels=2,#             n_ylabels=2,#             n_zlabels=2,#             xtitle='X',#             ytitle='Y',#             ztitle='Z',#         )# plotter.show()# mesh = upsample_point_cloud(points, 5000)# 仅进行一次点云上采样cloud = pv.PolyData(points)mesh = cloud.reconstruct_surface(nbr_sz = 10, sample_spacing = 0.8)mesh.smooth_taubin(n_iter=10, pass_band=5, inplace = True)mesh = mesh.fill_holes(100)mesh.save(stl_path.replace('filter', 'center'))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/3378.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux系统编程】第三十九弹---探索信号处理的奥秘:阻塞信号与sigset_t的深入剖析及实战

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、信号处理 2、阻塞信号 2.1、信号其他相关常见概念 2.2、在内核中的表示 2.3、sigset_t 2.4、信号集操作函数 3、完整…

零基础Apifox测试FastAPI接口入门

文章目录 一、FastAPI部分二、Apifox部分1、安装Apifox2、创建接口3、更改测试环境4、发送请求 一、FastAPI部分 python使用fastapi编写接口内容&#xff08;文件名&#xff1a;text.py&#xff09;&#xff1a; from fastapi import FastAPI import uvicornapp FastAPI()ap…

Linux终端退出程序后,TCP地址仍被占用

报错如下&#xff1a; Error on binding: Address already in use 这是一个正在运行的服务器&#xff0c;运行在linux的终端。上一次我使用CtrlZ退出这个程序&#xff0c;再次./my_server想运行这个程序时&#xff0c;出现这个报错。这是由两点原因&#xff1a; 1、守护进程或…

嵌入式通信协议:IIC简明学习笔记

IIC学习笔记 IIC特点 1.适合 小数据场合使用&#xff0c;传输距离短。 2.只能有一个主机。 3.标准IIC速度为100kHZ&#xff0c;高速IIC一般可达400kHZ以上。 4.SCL和SDA都需要接上拉电阻&#xff08;大小由速度和容性负载决定&#xff0c;一般在3.3k-10k之间&#xff09;。 5…

基于anaconda的python3.6安装opencv4.1.15

opencv-python一些新版本由于部分函数涉及专利问题&#xff0c;如sift和surf&#xff0c;有些功能不能很好地被使用&#xff0c;所以最好使用opencv-python 3.4.1.15版本的。 下载地址分别为&#xff1a; 1、https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/ 查找…

【自制操作系统】0x01MBR

环境 ubuntu 20.04 gcc 9.4.0&#xff08;加载硬盘程序之前都是&#xff0c;最后可能会切换到 gcc 4.4&#xff09; bochs 2.7 bochs 配置 bochs 安装之前文章记录过&#xff0c;现在记录一下本次使用的bochs配置 bochsrc #第一步&#xff0c;首先设置 Bochs 在运行过程中…

SpringBoot接入星火认知大模型

文章目录 准备工作整体思路接入大模型服务端和大模型连接客户端和服务端的连接测试 准备工作 到讯飞星火大模型上根据官方的提示申请tokens 申请成功后可以获得对应的secret&#xff0c;key还有之前创建的应用的appId&#xff0c;这些就是我们要用到的信息 搭建项目 整体思…

ssm056基于Java语言校园快递代取系统的设计与实现+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;校园快递代取系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园快递代取系统…

简单语音信号识别的MATLAB仿真

简单语音信号识别的MATLAB仿真 摘要&#xff1a; 隐马尔可夫模型&#xff08;HMM&#xff09;作为描述语音信号的一种统计模型&#xff0c;在现代语音处理中获得了广泛应用。本文概述了基于HMM的语音识别技术&#xff0c;阐述了预处理&#xff0c;特征提取以及训练&#xff0c…

童年玩具:两款线绳陀螺

1,2图是过去用来安装明线电线的瓷夹。现在应该找不到了。过去安装电线后&#xff0c;家里留下了一些&#xff0c;拿来做线陀螺非常好。 因为它非常重&#xff0c;旋转起来很有力&#xff0c;那声音呼呼响。 3,4图是现在都能看到的一个圆木片&#xff0c;两个孔&#xff0c;穿绳…

AntFlow一款开源免费且自主可控的仿钉钉工作流引擎

在现代企业管理中&#xff0c;流程审批的高效性直接影响到工作的流畅度与生产力。最近&#xff0c;我发现了一个非常有趣的项目——AntFlow。这个项目不仅提供了一个灵活且可定制的工作流平台&#xff0c;还能让用户以可视化的方式创建和管理审批流程。 如果你寻找一个快速集成…

光纤资源APP开发及二次开发说明

光纤资源APP主要由以下几部分组成&#xff1a; 登录界面选择项目界面地图创建节点界面填写详细信息界面成端及端口表界面接续及接续表界面 其中1、2、4界面不需要涉及到ht&#xff0c;故用原生界面即可实现&#xff0c;但是3、5、6涉及到ht&#xff0c;而ht在app中是不兼容的…

鉴源实验室·如何通过雷达攻击自动驾驶汽车-针对点云识别模型的对抗性攻击的科普

01 引 言 随着自动驾驶技术的迅速发展&#xff0c;雷达和激光雷达等传感器在自动驾驶汽车中的作用愈发重要。它们能够生成3D点云数据&#xff0c;帮助车辆实时感知周围环境并做出安全决策。然而&#xff0c;尽管这些传感器对驾驶环境的检测非常精确&#xff0c;它们也面临一种…

Stable Diffusion(2024)Ai绘画AIGC最新安装包资源下载+自学教程

以下内容为整理的Stable Diffusion保姆级教学内容&#xff0c;请购买的资料的同学务必认真学习&#xff01;按以下步骤操作快速掌握Stable Diffusion这个工具&#xff01; Stable Diffusion&#xff08;简称SD&#xff09;是一款地表最强AI绘图工具(AIGC)之一&#xff0c;Stab…

基于单片机的宠物自动喂食系统的设计

本设计以STM32单片机为核心控制器&#xff0c;搭载了OLED显示屏作为显示交互模块&#xff0c;HX711称重模块获取食物重量&#xff0c;ESP8266与手机APP通信从而远程控制&#xff0c;PWM输出控制舵机模拟投喂食物开关打开&#xff0c;驱动继电器控制水泵打开加水&#xff0c;HC-…

vue+websocket实现即时聊天平台

目录 1 什么是websocket 2 实现步骤 2.1 导入依赖 2.2 编写代码 1 什么是websocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它主要用于在客户端和服务器之间建立持久的连接&#xff0c;允许实时数据交换。WebSocket 的设计目的是为了提高 Web 应用程序的…

Spring Boot框架:大学城水电管理自动化

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

关于三色标记算法的理解

三色标记算法是一种垃圾标记的算法&#xff0c;用于cms和g1。 它将对象分为3种颜色&#xff1a; 1.白色对象&#xff1a;未被标记的对象 2.灰色对象&#xff1a;自身被标记&#xff0c;引用的其它对象还没被标记 3.黑色对象&#xff1a;自身以及所引用的对象都被标记完 标记过…

Python Matplotlib:基本图表绘制指南

Python Matplotlib&#xff1a;基本图表绘制指南 Matplotlib 是 Python 中一个非常流行的绘图库&#xff0c;它以简单易用和功能丰富而闻名&#xff0c;适合各种场景的数据可视化需求。在数据分析和数据科学领域&#xff0c;Matplotlib 是我们展示数据的有力工具。本文将详细讲…

深入探讨SEO分析技巧助力网站流量提升

内容概要 在当前的数字化时代&#xff0c;SEO分析的重要性不言而喻。它是提升网站流量的关键工具&#xff0c;帮助站长有效地优化网站内容和结构。通过系统的SEO分析&#xff0c;站长可以掌握用户搜索行为和需求&#xff0c;从而制定出更具针对性的内容策略。例如&#xff0c;…