您的位置:首页 > 其它

利用realsense官方SDK进行rgb图像和深度数据采集

2017-04-10 13:53 871 查看
#include <pxcsensemanager.h>
#include <pxcsession.h>
#include "util_render.h"
#include <iostream>
#include <string>
#include <stdio.h>
#include <opencv2\opencv.hpp>
#include <windows.h>

#define WIDTH 640
#define HEIGHT 480

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
UtilRender *renderColor = new UtilRender(L"COLOR_STREAM");
UtilRender *renderDepth = new UtilRender(L"DEPTH_STREAM");

PXCSenseManager *psm = 0;
psm = PXCSenseManager::CreateInstance();
if (!psm)
{
wprintf_s(L"Unabel to create the PXCSenseManager\n");
return 1;
}
pxcStatus sts;

psm->EnableStream(PXCCapture::STREAM_TYPE_COLOR, WIDTH, HEIGHT);

psm->EnableStream(PXCCapture::STREAM_TYPE_DEPTH, WIDTH, HEIGHT);

sts = psm->Init();
if (sts != PXC_STATUS_NO_ERROR)
{
wprintf_s(L"Unabel to Initializes the pipeline\n");
return 2;
}

PXCImage *colorIm, *depthIm;
PXCImage::ImageData depth_data, color_data;
PXCImage::ImageInfo depth_info, color_info;
while (psm->AcquireFrame(true) >= PXC_STATUS_NO_ERROR)

{
if (psm->AcquireFrame(true) < PXC_STATUS_NO_ERROR) break;

PXCCapture::Sample *sample = psm->QuerySample();

colorIm = sample->color;
depthIm = sample->depth;

if (colorIm->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::PIXEL_FORMAT_RGB24, &color_data) < PXC_STATUS_NO_ERROR)
wprintf_s(L"未正常获取彩色图\n");
if (depthIm->AcquireAccess(PXCImage::ACCESS_READ, &depth_data) < PXC_STATUS_NO_ERROR)
wprintf_s(L"未正常获取深度图\n");

depth_info = sample->depth->QueryInfo();
color_info = sample->color->QueryInfo();

Mat depth(Size(depth_info.width, depth_info.height), CV_16UC1, (void*)depth_data.planes[0], depth_data.pitches[0] / sizeof(uchar));
Mat color(Size(color_info.width, color_info.height), CV_8UC3, (void*)color_data.planes[0], color_data.pitches[0] / sizeof(uchar));

depthIm->ReleaseAccess(&depth_data);
colorIm->ReleaseAccess(&color_data);

if (!renderColor->RenderFrame(colorIm)) break;
if (!renderDepth->RenderFrame(depthIm)) break;

psm->ReleaseFrame();

imshow("color", color);
waitKey(1);
imshow("depth", depth * 15);

if (waitKey(10)==(int)'c')
{

FileStorage fs(".\\depth.xml", FileStorage::WRITE);
fs << "depth" << depth;
fs.release();
imwrite("Color.jpg", color);
}

waitKey(10);

}
psm->Release();
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐