读取txt文本数据,用区域生长方法分割求平面
代码如下。有几处特殊说明再代码中注明了。
读取的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文本数据,用区域生长方法分割求平面相关推荐
- ROS下使用C++读取txt文本数据并使用
本代码功能:在ROS下使用C++读取txt文本数据并对数据进行处理 分析:ROS的核心是话题订阅与发布,但作为ROS小白的我经常被各种话题搞得云里雾里,故本博客将可以处理的数据存入txt文本,通过读取 ...
- python——读取txt文本数据并可视化
最近用于对比结果,使用到了python的基本操作,之前也有了解但是与M相比难免有些区别 txt文本数据如下 0.9453125 0.9640625 0.671875 0.55625 0.475 0.9 ...
- python读取txt文本数据进行分词并生成词云图片
python对数据分词,生成词云图片 小编在日常生活工作中学习到的点,在此记录一下,希望能够帮助有需要的小伙伴. 文章目录 python对数据分词,生成词云图片 前言 一.全部代码 选用的图片和效果图 ...
- 使用C语言读取.txt文本数据构建链表时fscanf用法不当以及文件编码格式不对导致读取失败
问题描述 做C语言课设的时候想要通过读取文本的方式构建一个链表. 结构体 typedef struct grade {char subject[15];//科目char startTime[10];/ ...
- C# 读取TXT文本数据 添加到数据库
protected void Button1_Click(object sender, EventArgs e){//使用FileStream读取文件 FileStream fileStream = ...
- MATLAB读取写入文本数据最佳方法 | Best Method for Loading Saving Text Data Using MATLAB
MATLAB读取文件有很多方法.然而笔者在过去进行数据处理中,由于函数太多,相互混杂,与C#,Python等语言相比,反而认为读取文本数据比较麻烦.C#和Python等高级语言中,对于大部分的文本数据 ...
- python接口自动化参数化_Python读取txt文件数据的方法(用于接口自动化参数化数据)...
小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...
- python读取txt文件并求和,Python读取txt文件数据的方法(用于接口自动化参数化数据)...
小试牛刀: 1.需要python如何读取文件 2.需要python操作list 3.需要使用split()对字符串进行分割 代码运行截图 : 代码(copy) #encoding=utf-8 #1.r ...
- python逐行读取字符串_python3.4.3下逐行读入txt文本并去重的方法
读写文件时应注意的问题包括: 1.字符编码 2.操作完成即时关闭文件描述符 3.代码兼容性 几种方法: #!/bin/python3 original_list1=[" "] or ...
最新文章
- Ural 1018 (树形DP+背包+优化)
- Nature:科学家成功解读大脑构建的分子机制
- 别再问我如何双击打开.ipynb文件了!
- 根据最大值和最小值获取对应的单元格值
- python怎么换行输代码_python输代码怎么换行?
- IOS 控制器View的创建方式(方式的优先级 、view的延迟加载)
- 笔记本电脑无法进入睡眠状态_【小A问答】如何延长笔记本电脑电池的续航时间?...
- 【一起学爬虫】爬虫实战:爬取京东零食
- 14_按类别分页展示商品
- 性能测试流程(超级详细)
- 图像处理之对BMP图片的认识
- windows11百度网盘下载,win11iso镜像百度云下载
- python计算金星凌日
- 按键精灵移动端系列 - IOS(苹果版)安装1.3.8 deb
- mysql表数据量超过百万条了,count很慢。。
- 蓝桥杯刷题冲刺 | 倒计时28天
- cad怎样编辑标注文字?分享一个方法
- 【论文阅读一】Adaptive Cross-Modal Few-shot Learning
- ps cs6选择并遮住在哪设置
- 红帽子linux硬盘安装教程,XP下硬盘安装RedHat Enterprise Linux 5.5图文教程
热门文章
- iGEM2010,中国科大再获两金!
- 计算机考试修改照片系统,怎么把照片变成10K的?
- kafka文档(2)----kafka API(java版本)
- 苹果cms php获取id,苹果CMS全版本getshell打包第一弹
- bzoj5334 [Tjoi2018]数学计算(线段树)
- 为什么BA和PM的薪水要比程序员要高?
- 2021甘肃兰州高考成绩查询,2021兰州市地区高考成绩排名查询,兰州市高考各高中成绩喜报榜单...
- 基于单片机自动烘干衣架系统设计(毕设课设)
- 翻译D6(附AC码 POJ 05:Grocery Problem)
- 这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦