win下使用realsense+opencv获取RGBD数据
最近在学习realsense,期间遇到了很多麻烦,经过大家的帮助最终都解决了。现在记录下来,也方便帮助他人。
这篇文章主要是实现opencv显示realsense读取的彩色和深度数据。
首先说一下环境:win10+VS2013;opencv2.4.9 ;realsense有官方的SDK,不过我使用的是git上的资源librealsense,这里贴一下链接:https://github.com/IntelRealSense/librealsense。在这里,首先你要把opencv配置好,这个网上有很多资源。然后把librealsense下载下来,根据自己VS的版本打开相应工程就行。
代码很简单,如下:
// License: Apache 2.0. See LICENSE file in root directory.
// Copyright(c) 2015 Intel Corporation. All Rights Reserved.
/////////////////////////////////////////////////////
// librealsense tutorial #1 - Accessing depth data //
/////////////////////////////////////////////////////
#include <librealsense/rs.hpp>
#include <cstdio>
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() try
{
// 创建context对象,用来控制所有realsense设备。
rs::context ctx;
printf("There are %d connected RealSense devices.
", ctx.get_device_count());
if (ctx.get_device_count() == 0) return EXIT_FAILURE;
// 这里只获取一个设备。
rs::device * dev = ctx.get_device(0);
printf("
Using device 0, an %s
", dev->get_name());
printf(" Serial number: %s
", dev->get_serial());
printf(" Firmware version: %s
", dev->get_firmware_version());
//设备设置数据流只有两种,彩色和深度。
dev->enable_stream(rs::stream::depth, 640, 480, rs::format::z16, 30);
dev->enable_stream(rs::stream::color, 640, 480, rs::format::bgr8, 30);
dev->start();
// 这里dev->get_depth_scale()返回深度和实际转换比例:0.001。
const uint16_t one_meter = static_cast<uint16_t>(1.0f / dev->get_depth_scale());
bool flag = true;
while (flag)
{
dev->wait_for_frames();
// 数据读取和填充的部分。
uchar * color_frame = (uchar*)(dev->get_frame_data(rs::stream::color));
uint16_t * depth_frame = (uint16_t *)(dev->get_frame_data(rs::stream::depth));
Mat colorImg(480,640,CV_8UC3,color_frame);
Mat depthImg(480,640,CV_16UC1,depth_frame);
// 最终显示。
imshow("color", colorImg);
imshow("depth", depthImg*10);
waitKey(10);
}
return EXIT_SUCCESS;
}
catch (const rs::error & e)
{
// 异常处理。
printf("rs::error was thrown when calling %s(%s):
", e.get_failed_function().c_str(), e.get_failed_args().c_str());
printf(" %s
", e.what());
return EXIT_FAILURE;
}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
