如今博客终于又要开始更新了,告别了靠想象搞科研的日子,因此如今的我显得仍是比较无拘无束,在我学习生涯前2年这段备受煎熬与折磨的日子里,在当年那个环境我是不会这么去表达本身心里想法的(估计绝大部分人都不会),身边的例子让我更加坚信了,要作一只默默无闻的羔羊,也很庆幸这段经历并无伴随着我学习生活的始终,在恩师的学成归来后这一切都提早结束了,在接下来的日子里我仍是体会到了什么是科研,因此也算是没白来这一遭,惟一遗憾的只是这一切来的晚了点。同时我仍是特别但愿个人遭遇只是一个意外(最好是我想多了,其余人都过得挺好!),回忆往昔倍感我的选择以及自我驱动的重要性,在前者问题的处理上多次碰壁,可是一直支撑着本身的自我驱动精神努力的让本身保持对技术知识的高度承认,上周对北京某公司的电力巡线软件进行了操做,接着就动手在本身的平台上对该软件的实现过程进行了简单的预演,毕竟是预演,个人平台也不会拿出来卖钱,关键也没人会买,因此作了个大概就草草收工,只是把本身以前的一些东西直接在电力巡线上来运用一下而已;html
接着让尘封了4个月之久的cloudcompare源码从新开启,一直百度搜索怎样开发,逛遍整个网页貌似有价值的寥寥无几,不过已经习惯了,毕竟我是百度搜索不是google,每天各类技术交流群,一直等着天上掉馅饼,最后固然不会掉了。因此仍是得老老实实的直接上源码,一个下午加一个晚上,经过几个例子的调试,貌似找到了传说中的“葫芦”,因此接着画瓢,一下还真成功了!一旦成功之门被开启,立刻把开启我点云之路的PCL库塞了进去,接着就能够畅游了,以前开通了博客,可是对于曾经那个只能夹着尾巴作人的我来讲没有任何做用,因此很快就被我遗忘了,这几天准备从新开一下博客,把这些并无什么核心竞争力的知识共享给你们,毕竟能为初学者迈入cc开发的大门提供一点帮助。c++
(a)软件启动界面web
这是实验室当年小伙伴们一块儿开心探讨科研的场景,每次启动软件,都会激发我要为科研奋斗终身的激情,不知道他们是否是在作科研,毕竟当时我并不在电脑前面,就当是吧,否则我又开始怀疑人生了。app
(b)汉化版CloudCompare函数
每次寻找一个功能,我都得默默的打开百度翻译,曾经浪费了很多时间,故此,在一个彻夜无眠的晚上痛下决心,将其改为了汉化版的,同时说明一下,我确实在cc的源码上作的一些小的改动,因为平时喜欢黑灰色色调,因此大胆了将平台的风格作了修改。学习
(c) 案例分析之提取地面点 测试
最后给你们粘贴上一段核心代码,其实也没什么复杂的,本人非计算机专业的,真正学c++时间也不到半年,都能照葫芦画瓢,大神们必定再也不话下,相信聪明的你将很快会进入状态!this
//获取cc的点云对象 ccHObject::Container selectedEntities = m_selectedEntities; // 当前所选择的点云对象 //为了访问点云里的文件---本身加的的一段测试代码 size_t selNum = selectedEntities.size(); if (selNum != 1) { /* m_app->dispToConsole("Please select two cloud!", ccMainAppInterface::ERR_CONSOLE_MESSAGE);*/ return; } ccHObject* ent = selectedEntities[0]; assert(ent); ccPointCloud* m_cloud = static_cast<ccPointCloud*>(ent); pcl::PointCloud<pcl::PointXYZ>::Ptr clouds(new pcl::PointCloud<pcl::PointXYZ>); CCcloudToPCLcloud(m_cloud,clouds); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ground(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ground_remove(new pcl::PointCloud<pcl::PointXYZ>); pcl::PointIndicesPtr ground(new pcl::PointIndices); // 建立形态学滤波器对象 pcl::ProgressiveMorphologicalFilter<pcl::PointXYZ> pmf; pmf.setInputCloud(clouds); // 设置过滤点最大的窗口尺寸 pmf.setMaxWindowSize(10); // 设置计算高度阈值的斜率值--就是坡度 pmf.setSlope(1.0f); // 设置初始高度参数被认为是地面点 pmf.setInitialDistance(0.5f); // 设置被认为是地面点的最大高度 pmf.setMaxDistance(3.0f); pmf.extract(ground->indices); // Create the filtering object pcl::ExtractIndices<pcl::PointXYZ> extract; extract.setInputCloud(clouds); extract.setIndices(ground); extract.filter(*cloud_ground); // 提取非地面点 extract.setNegative(true); extract.filter(*cloud_ground_remove); //-------接下来给他们更新到dbtree里面 //1。须要对pcl的cloud转换成cc的 ccPointCloud *cloudGround = new ccPointCloud(); ccPointCloud *cloudNoGround = new ccPointCloud(); PCLcloudToCCcloud(cloud_ground, cloudGround); PCLcloudToCCcloud(cloud_ground_remove, cloudNoGround); //设置颜色区分一下 cloudGround->setRGBColor(255,0,0); cloudGround->showColors(true);//显示颜色 cloudGround->setPointSize(2); cloudNoGround->setRGBColor(0, 255, 0); cloudNoGround->showColors(true); cloudNoGround->setPointSize(3); m_cloud->setEnabled(false); //添加新的一组DB实体 ccHObject* cloudContainer = new ccHObject(m_cloud->getName() + QString::fromLocal8Bit("分割场景-地面点"));//父目录 //设置新点云并添加到实体 cloudGround->setVisible(true); cloudGround->setName(QString::fromLocal8Bit("zx的地面点!"));//子目录 cloudContainer->addChild(cloudGround); //添加实体到DB树 addToDB(cloudContainer); //添加新的一组DB实体 ccHObject* cloudContainer1 = new ccHObject(m_cloud->getName() + QString::fromLocal8Bit("分割场景-非地面点"));//父目录 //设置新点云并添加到实体 cloudNoGround->setVisible(true); cloudNoGround->setName(QString::fromLocal8Bit("zx的非地面点!"));//子目录 cloudContainer1->addChild(cloudNoGround); //添加实体到DB树 addToDB(cloudContainer1); //刷新 refreshAll(); QMessageBox::about(this, QString::fromLocal8Bit("成功"), QString::fromLocal8Bit("这是莫某的开发")); return;
记得最近有网友提示个人PCLCloudToCCpoint这个函数在哪,因此最近特地写了一篇博客加上这个接口google