PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化
- 前言
- 程序说明
- 输出结果
- 代码示例
- 总结
前言
随着工业自动化、智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要程度也同步激增(识别、定位、抓取、测量,缺陷检测等),而针对不同作业场景进行解决方案设计时,通常会借助PCL、OpenCV、Eigen等简单方便的开源算法库进行方案的快速验证和迭代以满足作业场景下的目标需求。
为了让对工业机器视觉方向感兴趣的同学能够少走一些弯路,故推出了此一系列简易入门教程示例,让初次使用者能够最简单直观地感受到当前所用算法模块的执行效果。
后续会逐步扩增与工业机器视觉相关的一些其它内容,如:
项目案例剖析、场景数据分析、基础算法模块、相机评测 等;
如有兴趣可加入群聊(若入群二维码被屏蔽,则可以通过Q群(1032861997)或评论、私信博主“群聊”,邀请入群),与同道同学及圈内同行一起交流讨论。
程序说明
加载并可视化obj模型纹理数据;
输出结果
代码示例
/** @File: load_obj.cpp* @Brief: pcl course* @Description: 加载并可视化obj模型纹理数据* @Version: 0.0.1* @Author: MuYv*/
#include <iostream>
#include <string>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/io/obj_io.h>
#include <pcl/io/vtk_lib_io.h>
#include <pcl/visualization/pcl_visualizer.h>int main(int argc, char** argv){if(argc != 2){std::cout<<"Usage: exec obj_file_path"<<std::endl;return -1;}const std::string kObjFilePath = argv[1]; // ../clouds/cabinet/cabinet/mesh.objpcl::PointCloud<pcl::PointXYZ>::Ptr cloud_src(new pcl::PointCloud<pcl::PointXYZ>());// 将obj格式数据加载为点云// 成功返回0,失败返回-1if(-1 == pcl::io::loadOBJFile(kObjFilePath,*cloud_src)){std::cout<<"load obj file failed. please check it."<<std::endl;return -2;}// 将obj格式数据加载为PolygonMesh对象pcl::PolygonMesh poly_mesh;// 成功返回0,失败返回-1if(-1 == pcl::io::loadOBJFile(kObjFilePath, poly_mesh)){std::cout<<"load obj file failed. please check it."<<std::endl;return -2;}// 将obj格式数据加载为TextureMesh对象pcl::TextureMesh texture_mesh, texture_mesh_tmp;// 成功返回0,失败返回-1if(-1 == pcl::io::loadPolygonFileOBJ(kObjFilePath, texture_mesh)){std::cout<<"load obj file failed. please check it."<<std::endl;return -2;}// 成功返回0,失败返回-1if(-1 == pcl::io::loadOBJFile(kObjFilePath, texture_mesh_tmp)){std::cout<<"load obj file failed. please check it."<<std::endl;return -2;}texture_mesh.tex_materials = texture_mesh_tmp.tex_materials;// 创建可视化对象pcl::visualization::PCLVisualizer viewer("viewer");// 将当前窗口,拆分成横向的2个可视化窗口,以viewport区分(v1/v2)int v1; int v2;int v3;//窗口参数分别对应 x_min, y_min, x_max, y_max, viewportviewer.createViewPort(0.0, 0.0, 0.33, 1.0, v1); viewer.createViewPort(0.33, 0.0, 0.66, 1.0, v2);viewer.createViewPort(0.66, 0.0, 1.0, 1.0, v3);// 添加2d文字标签viewer.addText("v1", 10,10, 20, 1,0,0, "viewport_v1", v1);viewer.addText("v2", 10,10, 20, 0,1,0, "viewport_v2", v2);viewer.addText("v3", 10,10, 20, 0,0,1, "viewport_v3", v3);// 添加坐标系viewer.addCoordinateSystem(0.5); // 单位:m// 设置可视化窗口背景色viewer.setBackgroundColor(0.2,0.2,0.2); // r,g,b 0~1之间//按照z方向深度进行渲染(色带渐变)pcl::visualization::PointCloudColorHandlerGenericField<pcl::PointXYZ> color(cloud_src, "z");// 向v1窗口中添加点云viewer.addPointCloud(cloud_src,color,"cloud_src",v1);// 根据点云id,设置点云可视化属性,此处将可视化窗口中的点大小调整为2级viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 2, "cloud_src");// 向v2窗口中添加PolygonMesh对象viewer.addPolygonMesh(poly_mesh, "mesh_src",v2);// 向v3窗口中添加PolygonMesh对象viewer.addTextureMesh(texture_mesh, "texture_mesh_src",v3);// // 设置可视化窗口内的所有mesh为线框模式,部分情况下,便于可视化debug// viewer.setRepresentationToWireframeForAllActors();// 关闭窗口则退出while(!viewer.wasStopped()){viewer.spinOnce(100);boost::this_thread::sleep(boost::posix_time::microseconds(100000));}return 0;
}
总结
obj模型常用作刚体工件模型数据的文本存储格式;
在基于pcl的接口进行可视化时,由于pcl算法库自身的问题,直接使用接口加载进来的无法正常展示为纹理模型,可按照上述代码中示例的方式进行;
注:部分测试所用点云数据来源于网络,如有侵权,请联系博主删除,谢谢。
PCL入门系列 —— 加载obj格式mesh模型、点云数据并作纹理模型TextureMesh可视化相关推荐
- PCL入门系列 —— 加载ply格式mesh模型、点云数据并作可视化展示
PCL入门系列 -- 加载ply格式mesh模型.点云数据并作可视化展示 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进,机器视觉(2D/3D)在工业领域的应用和重要 ...
- Panda3D如何加载obj格式的3D模型文件
在上文中,讲了如何将max.obj.mb.fbx等主流格式的3D模型文件转换为egg.gltf格式,Panda3D可以加载的格式.在上文末尾,博主临时看到了一种方式,可以让Panda3d直接加载o ...
- PCL入门系列 —— NormalEstimation、NormalEstimationOMP 基于邻域的点云法线估计
PCL入门系列 -- NormalEstimation.NormalEstimationOMP 基于邻域的点云法线估计 前言 程序说明 输出结果 代码示例 总结 前言 随着工业自动化.智能化的不断推进 ...
- wpf加载obj格式的3D模型图解
网上下一个obj格式的3D模型:再下一个obj文件查看器,看一下模型,效果如下: 使用SharpDevelop,新建一个WPF工程: 加载obj模型需要WavefrontObjLoader.cs文件: ...
- 通过超图在网页上加载obj格式3D模型
先看此文: https://blog.csdn.net/bcbobo21cn/article/details/109140958 在桌面版加载一个obj模型出来: 按目前的理解,只要在桌面版加载了模型 ...
- Html监听Fbx文件加载,FBX格式mesh解析与加载(一)
FBX格式mesh解析与加载(一) FBX格式mesh解析与加载(一) ** 理解FBX格式中Mesh数据结构** fbx文件是现在许多建模动画软件和游戏引擎之间共用的模型文件格式.fbx文件分为两种 ...
- Java3D加载obj文件+mtl文件
Java3d入门学习可以参考这位博主大神--苏若年,关于Java3D学习的文章.下面给出他部分文章的链接: 文1 创建三维几何模型:[ http://www.cnblogs.com/dennisit/ ...
- Three.js加载.obj和.mtl文件(无法加载材质、路径错误问题)
加载.obj模型文件 本文是Three.js电子书的14.3节 使用三维软件导出.obj模型文件的时候,会同时导出一个材质文件.mtl, .obj和.stl文件包含的信息一样都是几何体顶点相关数据,材 ...
- 超图桌面版加载obj 3D模型 - 2
在 https://blog.csdn.net/bcbobo21cn/article/details/109041525 里,加载obj格式模型没有出来效果: 下面来看一下其他方法:当前用的版本是10 ...
- 浅谈性能优化之图片压缩、加载和格式选择
原文链接:浅谈性能优化之图片压缩.加载和格式选择 在认识图片优化前,我们先了解下 [二进制位数]与[色彩呈现]的关系. 二进制位数与色彩 在计算机中,一般用二进制数来表示像素.在不同的图片格式中,像素 ...
最新文章
- STL:set/multiset用法详解
- 交换排序 —— 快速排序
- apache 配置rewrite模块,URL中隐藏index.php
- Nginx的反向代理 和 负载均衡
- python实现弹幕_python实现b站直播自动发送弹幕功能
- linux c之access方法介绍
- 使用less实现自适应宽度
- php 删除上传文件,php实现文件上传、下载和删除的方法
- c语言程序设计案例教程肖利群,C语言程序设计案例教程
- vue、nuxt性能优化
- AndroidStudio_android中实现对properties文件的读写操作_不把properties文件放在assets文件夹中_支持读写---Android原生开发工作笔记238
- 阿里云SDK手册之java SDK
- 算法学习:01背包问题求具体方案
- Python版学生管理系统源码分享【考试/作业必备】
- Altium Designed导出Gerber,Gerber文件所对应的层
- 【精华】PS十大抠图技法(上)
- 如何用 nginx 做 postfix 的 SMTP 反向代理,以及 XCLIENT 的支持
- Arcgis使用教程(十)ARCGIS地图制图之颜色样式选择设计与保存
- 数据库之order by
- 一名测试工程师的苦逼感想
热门文章
- 单片机定时器TMOD与TCON详解!
- Cisco 路由器破解密码
- Windows10+Caffe+CUDA7.5+VS2013环境配置
- adb与java端口冲突,如何解决adb devices 端口被占用的问题zz
- Android 刷机脚本工具箱
- 团标《智慧高速公路建设总体技术要求》发布征求意见稿
- linux asio,在Linux使用Asio:不可或缺的WineASIO
- Apollo学习笔记(一):canbus模块与车辆底盘之间的CAN数据传输过程
- 通达oa php_【通达OA】办公就用通达OA,通达OA官方网站_OA系统_协同办公
- matlab入门基础函数