点云技术相关产学研社区

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

扫一扫,访问微社区

查看: 6334|回复: 11

发个txt转彩色点云的源代码

[复制链接]
发表于 2013-8-29 15:51:57 | 显示全部楼层 |阅读模式
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;
int  main(int argc,char**argv)
{
        //argv[1]="g261.txt";
        //读入txt到数组中
        ifstream mycloud (argv[1]);
        if(!mycloud){
                cout<<"unable to open myfile";
                exit(1);}//报错       

        //统计点云个数
    int pnum=0;
        char buffer[1024];
        while(!mycloud.eof())
        {
                mycloud.getline(buffer,1000);
                pnum++;
        }
        mycloud.close();

// 创建点云
pcl::PointCloud<pcl::PointXYZRGB> cloud;
cloud.width=pnum;
cloud.height=1;
cloud.is_dense=false;
cloud.points.resize(cloud.width*cloud.height);
float x,y,z,r,g,b;
//x=y=z=0;
//r=g=b=0;
//int i=0;


//char buffer[1024];
mycloud.open(argv[1]);
         for(size_t i=0;i<cloud.points.size();i++)
  {
     mycloud.getline(buffer,1000);
    sscanf(buffer,"%f %f %f %f %f %f",&x,&y,&z,&r,&g,&b);
        //cout<<buffer<<endl;
        uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
       
        cloud.points[i].x=x;
        cloud.points[i].y=y;
    cloud.points[i].z=z;
        cloud.points[i].rgb = *reinterpret_cast<float*>(&rgb);
        //cloud.points[i].a=static_cast<uint8_t>(255);
        //cerr<<cloud.points[i].x<<" "<<cloud.points[i].y<<" "<< cloud.points[i].z<<" "<<cloud.points[i].r<<" "<<cloud.points[i].g<<" "<<cloud.points[i].b<<endl;
   // i++;
  }
mycloud.close();
//

//
//int r =255;
//int g= 0;
//int b= 0;
//for(size_t i=0;i<cloud.points.size();++i)
//{
//cloud.points[i].x=1024*rand()/(RAND_MAX+1.0f);
//cloud.points[i].y=1024*rand()/(RAND_MAX+1.0f);
//cloud.points[i].z=1024*rand()/(RAND_MAX+1.0f);
//uint32_t rgb = ((uint32_t)r << 16 | (uint32_t)g << 8 | (uint32_t)b);
//cloud.points[i].rgb = *reinterpret_cast<float*>(&rgb);
//
//
// }
//argv[2]="g261.pcd";
//pcl::io::savePCDFileASCII(argv[2],cloud);
pcl::io::savePCDFileBinary(argv[2],cloud);
//std::cerr<<"Saved "<<cloud.points.size()<<" data points to test_pcd.pcd."<<std::endl;
//for(size_t i=0;i<cloud.points.size();++i)
//std::cerr<<"    "<<cloud.points[i].x<<" "<<cloud.points[i].y<<" "<<cloud.points[i].z<<"    "<<cloud.points[i].r<<" "<<cloud.points[i].g<<" "<<cloud.points[i].b<<std::endl;
return(0);
}
经测试能正常运行 但希望大牛们能继续改进 也希望改进后大家能共享下

回复

使用道具 举报

发表于 2013-11-24 10:36:17 | 显示全部楼层
好东西,希望楼主多分享
回复 支持 反对

使用道具 举报

发表于 2013-11-24 11:11:16 | 显示全部楼层
但我运行时出错误了。。。楼主您运行这个程序时把g261.txt放到哪了?vs2010的属性的工作参数设置了吗?期待您的回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-2 08:27:08 | 显示全部楼层
不走寻常路 发表于 2013-11-24 11:11
但我运行时出错误了。。。楼主您运行这个程序时把g261.txt放到哪了?vs2010的属性的工作参数设置了吗?期待 ...

用命令行运行,txt在哪 你设置的到哪里就行了
回复 支持 反对

使用道具 举报

发表于 2013-12-2 16:32:30 | 显示全部楼层
你猜 发表于 2013-12-2 08:27
用命令行运行,txt在哪 你设置的到哪里就行了

哦,我是用vs2010运行的,不一样
回复 支持 反对

使用道具 举报

发表于 2014-3-13 21:40:56 | 显示全部楼层
谢谢您的资源喔:lol
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-3-17 09:20:33 | 显示全部楼层
hihaun 发表于 2014-3-13 21:40
谢谢您的资源喔

不客气:)
回复 支持 反对

使用道具 举报

发表于 2014-6-24 15:07:09 | 显示全部楼层
顶一个!
回复 支持 反对

使用道具 举报

发表于 2014-6-24 15:24:17 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

发表于 2014-7-3 21:51:39 | 显示全部楼层
这个程序有问题,是能正常运行,但结果不对。希望哪位高手能改正一下
回复 支持 反对

使用道具 举报

本版积分规则

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

GMT+8, 2024-4-27 23:46 , Processed in 1.722079 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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