代码如下。有几处特殊说明再代码中注明了。

读取的txt文本就是3D点云数据。形式如下:

0.1, 0.3, 0.9

1.0 , 1.3 ,  1.1

0.3, 0.4, 0.6

上面的数据计算由LSD中公式得来。已知图像坐标,点的逆深度值,求其3D

坐标公式如下:

// D  *  (u,v,1)*K逆 = 1/(1/D)* (u*fx_inv + cx_inv, v*fy_inv + cy_inv, 1)

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL)
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/segmentation/region_growing.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree.h>
#include <pcl/filters/statistical_outlier_removal.h>
#include <iostream>
#include <vector>
#include<ctime>
#include<cstdlib>
#include <pcl/filters/voxel_grid.h>
#include <pcl/visualization/pcl_visualizer.h>

using namespace pcl;
using namespace std;
typedef PointXYZ PoinT;
int *rand_rgb(){//随机产生颜色
    int *rgb = new int[3];
    rgb[0] = rand() % 255;
    rgb[1] = rand() % 255;
    rgb[2] = rand() % 255;
    return rgb;
}
int main(int argc, char const *argv[])
{

//=============读取文本部分============================================================

int totalpoints = 0;
    cout<<"====== "<<argv[1]<<endl;
    int xx = atoi(argv[1]);
    //读入txt文档
    char buffer[256];

char txtname[500];
    sprintf(txtname, "%s%d%s", "/home/yy/imageresult0/", xx, ".txt");
    FILE *fp = fopen(txtname, "r");
    while (fgets(buffer, sizeof(buffer), fp) != NULL)
    {
        totalpoints ++;
    }
    fclose(fp);

printf("totalpoints = %d\n", totalpoints);
    // 创建点云
    pcl::PointCloud<pcl::PointXYZ> cloud1;
    cloud1.width = totalpoints;
    cloud1.height = 1;
    cloud1.is_dense=false;
    cloud1.points.resize(cloud1.width * cloud1.height);

{
        int i = 0;
        char buffer[256];
        FILE *fp = fopen(txtname, "r");
        while (fgets(buffer, sizeof(buffer), fp) != NULL)
        {
            char delim[] = ",";
            char *p = NULL;
            float date[3] = {0};
            int flag = 0;
            for(p = strtok(buffer, delim); p != NULL; p = strtok(NULL, delim))
            {
                date[flag] = atof(p);
                flag ++;
            }
            cloud1.points[i].x = date[0];
            cloud1.points[i].y = 0 - date[1];
            cloud1.points[i].z =  date[2];

i ++;
        }
        fclose(fp);
    }

PointCloud<PoinT>::Ptr cloud(new PointCloud<PoinT>);

//指针与非ptr之间的转换。

cloud = cloud1.makeShared();

PointCloud<PoinT>::Ptr sor_cloud(new PointCloud<PoinT>);
    sor_cloud = cloud;
    
    //法向量求解**********************************************
    NormalEstimation<PoinT, Normal> ne;
    search::KdTree<PoinT>::Ptr tree(new search::KdTree<PoinT>);
    PointCloud<Normal>::Ptr normal_cloud(new PointCloud<Normal>);
    ne.setInputCloud(sor_cloud);
    ne.setKSearch(20);
    ne.setSearchMethod(tree);
    ne.compute(*normal_cloud);
    //基于法向量和曲率的区域生长算法**************************
    PointCloud<PoinT>::Ptr reg_cloud(new PointCloud<PoinT>);
    RegionGrowing<PoinT, Normal> reg;
    reg.setInputCloud(sor_cloud);
    reg.setSearchMethod(tree);
    reg.setNumberOfNeighbours(20);
    reg.setMinClusterSize(5);
    reg.setMaxClusterSize(100000);
    reg.setSmoothnessThreshold(3.0 / 180 * M_PI);
    reg.setCurvatureThreshold(1.0);
    reg.setInputNormals(normal_cloud);

vector<PointIndices>clusters;
    reg.extract(clusters);

cout<<"clusters.size( = "<<clusters.size()<<endl;
    visualization::PCLVisualizer::Ptr viewer(new visualization::PCLVisualizer("Result of RegionGrowing"));
    for (int iter = 0; iter < clusters.size();iter++)
    {
        PointCloud<PoinT>::Ptr copy_cloud(new PointCloud<PoinT>);
        vector<int> inlier = clusters[iter].indices;
        copyPointCloud<PoinT>(*sor_cloud, inlier, *copy_cloud);
        stringstream ss;
        ss << "C:\\Users\\Administrator\\Desktop\\" << "RegionGrowing_clouds" << iter << ".pcd";
        //io::savePCDFileASCII(ss.str(), *copy_cloud);
        int *rgb = rand_rgb();//随机生成0-255的颜色值
        visualization::PointCloudColorHandlerCustom<PoinT>rgb1(copy_cloud, rgb[0], rgb[1], rgb[2]);//提取的平面不同彩色展示
        delete[]rgb;
        viewer->addPointCloud(copy_cloud, rgb1, ss.str());
        viewer->setPointCloudRenderingProperties(visualization::PCL_VISUALIZER_POINT_SIZE, 3, ss.str());
    }
    viewer->spin();

return 0;
}

读取txt文本数据,用区域生长方法分割求平面相关推荐

  1. ROS下使用C++读取txt文本数据并使用

    本代码功能:在ROS下使用C++读取txt文本数据并对数据进行处理 分析:ROS的核心是话题订阅与发布,但作为ROS小白的我经常被各种话题搞得云里雾里,故本博客将可以处理的数据存入txt文本,通过读取 ...

  2. python——读取txt文本数据并可视化

    最近用于对比结果,使用到了python的基本操作,之前也有了解但是与M相比难免有些区别 txt文本数据如下 0.9453125 0.9640625 0.671875 0.55625 0.475 0.9 ...

  3. python读取txt文本数据进行分词并生成词云图片

    python对数据分词,生成词云图片 小编在日常生活工作中学习到的点,在此记录一下,希望能够帮助有需要的小伙伴. 文章目录 python对数据分词,生成词云图片 前言 一.全部代码 选用的图片和效果图 ...

  4. 使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败

    问题描述 做C语言课设的时候想要通过读取文本的方式构建一个链表. 结构体 typedef struct grade {char subject[15];//科目char startTime[10];/ ...

  5. C# 读取TXT文本数据 添加到数据库

    protected void Button1_Click(object sender, EventArgs e){//使用FileStream读取文件 FileStream fileStream = ...

  6. MATLAB读取写入文本数据最佳方法 | Best Method for Loading Saving Text Data Using MATLAB

    MATLAB读取文件有很多方法.然而笔者在过去进行数据处理中,由于函数太多,相互混杂,与C#,Python等语言相比,反而认为读取文本数据比较麻烦.C#和Python等高级语言中,对于大部分的文本数据 ...

  7. python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  8. python读取txt文件并求和,Python读取txt文件数据的方法(用于接口自动化参数化数据)...

    小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...

  9. python逐行读取字符串_python3.4.3下逐行读入txt文本并去重的方法

    读写文件时应注意的问题包括: 1.字符编码 2.操作完成即时关闭文件描述符 3.代码兼容性 几种方法: #!/bin/python3 original_list1=[" "] or ...

最新文章

  1. Ural 1018 (树形DP+背包+优化)
  2. Nature:科学家成功解读大脑构建的分子机制
  3. 别再问我如何双击打开.ipynb文件了!
  4. 根据最大值和最小值获取对应的单元格值
  5. python怎么换行输代码_python输代码怎么换行?
  6. IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)
  7. 笔记本电脑无法进入睡眠状态_【小A问答】如何延长笔记本电脑电池的续航时间?...
  8. 【一起学爬虫】爬虫实战:爬取京东零食
  9. 14_按类别分页展示商品
  10. 性能测试流程(超级详细)
  11. 图像处理之对BMP图片的认识
  12. windows11百度网盘下载,win11iso镜像百度云下载
  13. python计算金星凌日
  14. 按键精灵移动端系列 - IOS(苹果版)安装1.3.8 deb
  15. mysql表数据量超过百万条了,count很慢。。
  16. 蓝桥杯刷题冲刺 | 倒计时28天
  17. cad怎样编辑标注文字?分享一个方法
  18. 【论文阅读一】Adaptive Cross-Modal Few-shot Learning
  19. ps cs6选择并遮住在哪设置
  20. 红帽子linux硬盘安装教程,XP下硬盘安装RedHat Enterprise Linux 5.5图文教程

热门文章

  1. iGEM2010,中国科大再获两金!
  2. 计算机考试修改照片系统,怎么把照片变成10K的?
  3. kafka文档(2)----kafka API(java版本)
  4. 苹果cms php获取id,苹果CMS全版本getshell打包第一弹
  5. bzoj5334 [Tjoi2018]数学计算(线段树)
  6. 为什么BA和PM的薪水要比程序员要高?
  7. 2021甘肃兰州高考成绩查询,2021兰州市地区高考成绩排名查询,兰州市高考各高中成绩喜报榜单...
  8. 基于单片机自动烘干衣架系统设计(毕设课设)
  9. 翻译D6(附AC码 POJ 05:Grocery Problem)
  10. 这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦