winでrealsense+opencvを使用してRGBDデータを取得

2439 ワード

最近realsenseを勉強しているうちに、いろいろなトラブルに遭って、みんなの助けで最終的に解決しました.今記録しておくと、他人を助けるのにも便利です.
この文章は主にopencv表示realsense読み出しのカラーと深さデータを実現する.
まず環境についてお話しします:win 10+VS 2013;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.
", 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(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; }