深度图像与点云数据之间的转换关系
来源:互联网 发布:登录我的淘宝 编辑:程序博客网 时间:2024/06/05 02:46
const double camera_factor = 1000;
const double camera_cx = 325.5;
const double camera_cy = 253.5;
const double camera_fx = 518.0;
const double camera_fy = 519.0;
深度图与点云数据之间的映射关系如下:
cv::Mat mDepth= cv::imread("C:\\Users\\XiRobot\\Desktop\\新兴铸管采图\\Right\\0_depth_09-19-16.png",-1);
PointCloud::Ptr cloud(new PointCloud);
// 遍历深度图
for (int m = 0; m < mDepth.rows; m++)
{
for (int n = 0; n < mDepth.cols; n++)
{
// 获取深度图中(m,n)处的值
ushort d = mDepth.ptr<ushort>(m)[n];
// d 没有值则跳过此点
if (d == 0)
{
continue;
}
PointT p;
// 计算这个点的空间坐标
p.z = double(d) / camera_factor;
p.x = (n - camera_cx) * p.z / camera_fx;
p.y = (m - camera_cy) * p.z / camera_fy;
p.r = rand() % 255;
p.g = rand() % 255;
p.b = rand() % 255;
cloud->points.push_back(p);
}
}
深度图转换为点云数据就上面几行代码即可
若需要将点云数据转换为深度图:
unsigned int iSum = 0;
for (int i = 0; i < mReslt.rows; i++)
{
for (int j = 0; j < mReslt.cols; j++)
{
if (iSum < cloud3->points.size() && mReslt.ptr<ushort>(i)[j] != 1)//此处的判断是去掉像素为0的地方,像素为0的地方没有点云数据
{
mReslt.ptr<ushort>(i)[j] = cloud3->points[iSum].z*camera_factor;//255
iSum++;
}
else
{
mReslt.ptr<ushort>(i)[j] = 0;
}
}
}
若需要源码,请关注咱家的微信号。一起来学习
我的公众号:欢迎大家一起来学习
扫码关注我们:跟着数理化走天下
获得更多的信息哦,一起交流,一起成长哦:微信号:跟着数理化走天下,纯属个人的交流,无盈利目的
最近在做pcl的项目,不方便将源码上传,望谅解如有疑问,欢迎交流
- 深度图像与点云数据之间的转换关系
- 通过Kinect的深度图像数据计算三维点云
- 通过Kinect的深度图像数据计算三维点云
- 图像像素与数据量之间的关系
- 深度图像与点云区别
- 深度图像与点云区别
- 【DSP开发】【图像处理】Gray与YUV之间的转换关系
- 图像与原始字节之间的转换
- 弧度与度之间的转换关系
- int与char之间的转换关系
- julianDate与Date之间的转换关系
- IplImage图像与BYTE图像之间的转换与利用
- IpiImage图像与BYTE图像之间的转换
- 关于坐标系转换与点在坐标系之间的转换
- C#与数据库之间关系与对象的转换
- 指针与数组之间的关系与转换
- 二进制数据与字符串之间的转换
- Java的int与byte转换之间的关系
- 将十进制数转换为十六进制数
- 一个表单同时提交多条记录
- BACnet协议
- X轴转圈动画
- java压缩,解压文件
- 深度图像与点云数据之间的转换关系
- Qt程序自动重启的实现
- 回顾春运——灵宝西站派出所第一警务区: 张千
- 深入学习Android——AIDL机制
- java解析PDF文件,并获取到指定数据.Eg
- HBase原理-数据读取流程解析
- Webmagic爬虫--②爬自己的CSDN博客列表
- CentOS(Red Hat内核)MongoDB3.4企业版安装
- qt-udp协议编程