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 
#include 
#include 
#include 

using namespace std;
using namespace cv;

int main() try
{
	// 创建context对象,用来控制所有realsense设备。
	rs::context ctx;
	printf("There are %d connected RealSense devices.\n", ctx.get_device_count());
	if (ctx.get_device_count() == 0) return EXIT_FAILURE;

	// 这里只获取一个设备。
	rs::device * dev = ctx.get_device(0);
	printf("\nUsing device 0, an %s\n", dev->get_name());
	printf("    Serial number: %s\n", dev->get_serial());
	printf("    Firmware version: %s\n", 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(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):\n", e.get_failed_function().c_str(), e.get_failed_args().c_str());
	printf("    %s\n", e.what());
	return EXIT_FAILURE;
}

你可能感兴趣的:(realsense)