RGBD相机模型与图片处理
Posted guoben
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RGBD相机模型与图片处理相关的知识,希望对你有一定的参考价值。
本文学习自《视觉SLAM十四讲》
双目相机通过视差来计算深度。RGBD相机则可以主动测量每个像素的深度。
- 通过红外结构光(Structured Light)来测量像素距离的。例子有Kinect 1 代、Project Tango 1 代、Intel RealSense 等。
- 通过飞行时间法(Time-of-flight,ToF)原理测量像素距离的。例子有Kinect 2 代和一些现有的ToF 传感器等
RGBD相机原理图
那么如何从RGBD相机提取像素的深度信息呢?
下面是一个简单的小程序,可以显示像素的深度信息.
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>
using namespace std;
float depthscale = 1.0f/1000; //尺度因子,表示一个像素对应多少实际中的米
int main(int argc, char **argv)
{
cv::Mat depth = cv::imread("img.jpg");
depth.convertTo(depth,CV_32FC1,depthscale);
for (int v = 0; v < depth.rows; v++)
{
for (int u = 0; u < depth.cols; u++) {
unsigned int d = depth.ptr<unsigned short>(v)[u]; // 深度值
if (d == 0)
continue; // 为0表示没有测量到
else
{
cout<<d<<"";
if(v%50==0||u%50==0)
cout<<endl;
}
}
}
return 0;
}
以上是关于RGBD相机模型与图片处理的主要内容,如果未能解决你的问题,请参考以下文章
使用cv :: rgbd :: Odometry :: compute
我在 ROS realsense D435 相机上也遇到了这个错误。我写的代码“roslaunch realsense2_camera rs_rgbd.launch”