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のバージョンに合わせてプロジェクトを開ければいいです.
コードは簡単です.次のようになります.
この文章は主に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;
}