点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 27726|回复: 14

用pcl读取obj文件,并保存

[复制链接]
发表于 2013-10-9 22:12:59 | 显示全部楼层 |阅读模式
我写了一段代码,想实现obj文件的读取和保存,代码如下:
#include <pcl/point_types.h>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/PolygonMesh.h>
#include <pcl/ros/conversions.h>//formROSMsg
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ
//#include <pcl/visualization/pcl_visualizer.h>

int main()
{
    pcl::PolygonMesh mesh;
    pcl::io::loadPolygonFile("K326-DD-REDUCE NOISE.obj",mesh);

    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZRGB>);
    pcl::fromROSMsg(mesh.cloud, *cloud);
    pcl::io::savePCDFileASCII("hah.pcd",*cloud);

    cin.get();
    return 0;
}

但是出现了问题:
1>d:\program files\pcl\pclsource\pcl-pcl-1.7.0\common\include\pcl\ros\conversions.h(111): error C2143: syntax error : missing ';' before ''template<''.

然后调试,报错指向了conversions.h:
PCL_DEPRECATED (template<typename PointT> void toROSMsg (
        const pcl::PointCloud<PointT>& cloud, pcl::PCLPointCloud2& msg),
      "pcl::fromROSMsg is deprecated, please use fromPCLPointCloud2 instead.");

求帮助,谢谢!

回复

使用道具 举报

发表于 2013-10-10 05:45:00 | 显示全部楼层
fromPCLPointCloud2 (const pcl::PCLPointCloud2& msg, pcl::PointCloud<;PointT>& cloud,
  168               const MsgFieldMap& field_map)你试一试改为这个函数,貌似你用的fromROSMsg在1.6以前用吧,一直用的数据就是pcd的,还没体验过PCL中扩展的其他文件格式。
如果能使,分享下啊,谢谢。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-10 10:09:24 | 显示全部楼层
guohaolys 发表于 2013-10-10 05:45
fromPCLPointCloud2 (const pcl:CLPointCloud2& msg, pcl:ointCloud& cloud,
  168               cons ...

谢谢回复,我把代码做了一些改变,主要是删除了包含formROSMsg的头文件,然后相应的修改了一下代码,如下:
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/io/obj_io.h>
#include <pcl/PolygonMesh.h>
//#include <pcl/ros/conversions.h>//formROSMsg所属头文件;
#include <pcl/point_cloud.h>
#include <pcl/io/vtk_lib_io.h>//loadPolygonFileOBJ所属头文件;
//#include <pcl/visualization/pcl_visualizer.h>

using namespace std;
using namespace pcl;
int main()
{
        pcl::PolygonMesh mesh;
        pcl::io::loadPolygonFile("K326-DD-REDUCE NOISE.obj",mesh);

        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
        pcl::fromPCLPointCloud2(mesh.cloud, *cloud);
        pcl::io::savePCDFileASCII("K326-DD-REDUCE NOISE.pcd",*cloud);

        cout<<cloud->size()<<endl;

        cout<<"OK!";
        cin.get();
        return 0;
}
回复 支持 反对

使用道具 举报

发表于 2013-10-11 05:10:53 | 显示全部楼层
just_rookie 发表于 2013-10-10 10:09
谢谢回复,我把代码做了一些改变,主要是删除了包含formROSMsg的头文件,然后相应的修改了一下代码,如下 ...

测试可以用了吧?下次用的obj的就直接用这段代码了,哈哈,谢谢啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-10-19 20:54:28 | 显示全部楼层
guohaolys 发表于 2013-10-11 05:10
测试可以用了吧?下次用的obj的就直接用这段代码了,哈哈,谢谢啊。

可以用的。不客气,分享是一种美德,向老外学习。
回复 支持 反对

使用道具 举报

发表于 2014-3-17 17:22:55 | 显示全部楼层
赞一个!!!
回复 支持 反对

使用道具 举报

发表于 2014-3-20 09:33:58 | 显示全部楼层
赞一个!!!
回复 支持 反对

使用道具 举报

发表于 2015-5-3 21:44:41 | 显示全部楼层
这个帖子太棒了,借助这个帖子,我实现了将  三角网格的 PLY文件进行加载及显示:D
回复 支持 反对

使用道具 举报

发表于 2015-10-16 17:27:04 | 显示全部楼层
为什么C:\Users\zjc\Desktop\QQ截图20151016163333.bmp
回复 支持 反对

使用道具 举报

发表于 2015-10-16 17:28:18 | 显示全部楼层
我的提示fromPCLPointCloud2”: 不是“pcl”的成员
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-5-12 18:28 , Processed in 1.146620 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表