JoinMap
#include <iostream>
#include <fstream>
using namespace std;
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <Eigen/Geometry>
#include <boost/format.hpp> // for formating strings
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
//#include <pcl/visualization/pcl_visualizer.h> //#define EIGEN_DONT_VECTORIZE
//#define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT int main( int argc, char** argv )
{
vector<cv::Mat> colorImgs, depthImgs; // 彩色图和深度图
vector<Eigen::Isometry3d, Eigen::aligned_allocator<Eigen::Isometry3d>> poses; // 相机位姿 ifstream fin("./pose.txt");//读取相机位姿 如果没有相机位姿呢?相机位姿在哪里?
if (!fin)
{
cerr<<"请在有pose.txt的目录下运行此程序"<<endl;
//return 1;
} for ( int i=; i<; i++ )
{
boost::format fmt( "./%s/%d.%s" ); //图像文件格式
colorImgs.push_back( cv::imread( (fmt%"color"%(i+)%"jpg").str() ));
depthImgs.push_back( cv::imread( (fmt%"depth"%(i+)%"jpg").str(), - )); // 使用-1读取原始图像 double data[] = {};
for(int j=;j<;j++)
{
double d=;
fin>>d;
data[j]=d;
}
//for ( auto& d:data )
//fin>>d;
Eigen::Quaterniond q( data[], data[], data[], data[] ); //旋转4变量
Eigen::Isometry3d T(q);
T.pretranslate( Eigen::Vector3d( data[], data[], data[] )); //平移3变量
poses.push_back( T );
} // 计算点云并拼接
// 相机内参
double cx = 315.9;// 319.5
double cy = 230.3;// 239.5
double fx = 371.5;// 490.3
double fy = 374.2;// 490.3
double depthScale = 1000.0; cout<<"正在将图像转换为点云..."<<endl; // 定义点云使用的格式:这里用的是XYZRGB
typedef pcl::PointXYZRGB PointT;
typedef pcl::PointCloud<PointT> PointCloud; // 新建一个点云
PointCloud::Ptr pointCloud( new PointCloud );
for ( int i=; i<; i++ )
{
cout<<"转换图像中: "<<i+<<endl;
cv::Mat color = colorImgs[i];
cv::Mat depth = depthImgs[i];
Eigen::Isometry3d T = poses[i]; //姿态
for ( int v=; v<color.rows; v++ )
for ( int u=; u<color.cols; u++ )
{
unsigned int d = depth.ptr<unsigned short> ( v )[u]; // 深度值
if ( d== ) continue; // 为0表示没有测量到
Eigen::Vector3d point;
point[] = double(d)/depthScale; //深度值除以1000
point[] = (u-cx)*point[]/fx; //X
point[] = (v-cy)*point[]/fy; //Y
Eigen::Vector3d pointWorld = *point; //转世界坐标 PointT p ;
p.x = pointWorld[]; //世界坐标x
p.y = pointWorld[]; //世界坐标y
p.z = pointWorld[]; //世界坐标z
p.b = color.data[ v*color.step+u*color.channels() ]; //颜色b
p.g = color.data[ v*color.step+u*color.channels()+ ]; //颜色g
p.r = color.data[ v*color.step+u*color.channels()+ ]; //颜色r
pointCloud->points.push_back( p );
}
} pointCloud->is_dense = false;
cout<<"点云共有"<<pointCloud->size()<<"个点."<<endl;
pcl::io::savePCDFileBinary("map.pcd", *pointCloud );
system("pause");
return ;
}
VS生成的C++项目常用目录设置:https://blog.csdn.net/CreateUserName_Keep/article/details/78884195
VS2010项目属性的默认包含路径设置方法:



可是用cloud_viewer.exe map.pcd在命令行却说“应用程序无法正常启动0xc000007b”,这一定是因为pcl的外部链接库没有添加到path路径或者是缺少dll文件导致的。但是在pcl目录下却可以


这个很明显不大对

https://blog.csdn.net/u012423865/article/details/78036543
https://blog.csdn.net/blademan1234/article/details/79796901

问题:真实距离是多少?为什么绘制的效果很差。。。噪声太多?

操作:

JoinMap的更多相关文章
- 视觉slam十四讲ch5 joinMap.cpp 代码注释(笔记版)
#include <iostream> #include <fstream> using namespace std; #include <opencv2/core/co ...
- octomap的简介
装载自高翔博士的博客:https://www.cnblogs.com/gaoxiang12/p/5041142.html 什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨迹,并建 ...
- 视觉slam十四讲开源库安装教程
目录 前言 1.Eigen线性代数库的安装 2.Sophus李代数库的安装 3.OpenCV计算机视觉库的安装 4.PCL点云库的安装 5.Ceres非线性优化库的安装 6.G2O图优化库的安装 7. ...
- SLAM拾萃(1):octomap
前言 大家好,时隔多年之后,我又开始了博客旅程.经历了很多事情之后呢,我发现自己的想法真的很简单:好好读书做课题,闲下来时写写博客,服务大家.所以我会继续写SLAM相关的博客.如果你觉得它对你有帮助, ...
- octomap相关
转载自http://blog.csdn.net/linuxarmsummary/article/details/50924947 什么是octomap? RGBD SLAM的目的有两个:估计机器人的轨 ...
- Spark常用算子-KeyValue数据类型的算子
package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import or ...
- 在github上下载子文件夹(svn命令)
Q: 平时都是用git clone这个命令从github中克隆出完整的文件,但有时我们仅需要其中某个文件夹时,该如何下载? A: 可以使用svn命令来完成. 具体用法:(以视觉slam14讲的gith ...
- SpringDataJPA对SimpleJpaRepository/JPARepository返回结果的进一步处理(大体浏览,没细看)
package com.yb.fw.core.helper; public enum Op { LIKE,// like NOTLIKE,// notlike EQ,// = NOTEQ,// != ...
- 大数据之路week07--day04 (YARN,Hadoop的优化,combline,join思想,)
hadoop 的计算特点:将计算任务向数据靠拢,而不是将数据向计算靠拢. 特点:数据本地化,减少网络io. 首先需要知道,hadoop数据本地化是指的map任务,reduce任务并不具备数据本地化特征 ...
随机推荐
- Kotlin Android学习入门
1.基本语法 https://github.com/mcxiaoke/kotlin-notes/blob/master/kotlin-tutorial-basic.md 2.推荐两篇Kotlin An ...
- 【android】SDK在线升级
1.修改本地hosts文件 hosts文件位置:C:\Windows\System32\drivers\etc\hosts 在底部添加:203.208.46.146 dl-ssl.google.com ...
- 【升级至sql 2012】sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)
sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611.请将该数据库升级为最新版本.) 最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件 ...
- VBA7种文档遍历法
Sub 在选定文档最后加入一句话() '遍历文件 Dim MyDialog As FileDialog On Error Resume Next Application.ScreenUpdating ...
- gmake与make的区别
gnu make在linux下一般是叫make但是如果是在其他的unix系统下,因为有一个原生的makegnu make就改个名字叫gmake了.就这们简单 当port一个老的unix程序,如老的Su ...
- win7右下角的网络连接图标不见了~终极必杀技
1.打开程序管理器(ctrl+alt+delete) 2.在进程那里找到"explorer.exe",然后按结束进程(此时工具栏会消失) 3.然后在文件(程序管理器左上角),点击& ...
- 双系统(Windows+Ubuntu)重装Ubuntu后,修复引导
重装Ubuntu后,重启机器,Windows系统消失了.进入BIOS修改启动顺序,Windows系统恢复了,但是,刚装好的Ubuntu没了,一开机,电脑自动进入Windows. 解决办法: 用装系统的 ...
- redis for windows之nosql还需要入门?
RT:nosql给很多人的感觉就是上手特别快,本文也是一篇入门级的,哎~~ 又写了一篇没有卵用的博文,姑且把它当作一篇文档吧,还是没有发布/订阅.事件...等介绍的一篇残缺文档,幸好废话不是很多,凑合 ...
- 浅谈Laravel框架的CSRF
前文 CSRF攻击和漏洞的参考文章: http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html Laravel默认是开启了CSRF功能, ...
- jquery中的data-icon和data-role
转自:https://blog.csdn.net/Sayesan/article/details/83378524 jquery中的data-icon和data-role data-role参数 ...