利用realsense官方SDK进行rgb图像和深度数据采集
#include <pxcsensemanager.h> #include <pxcsession.h> #include "util_render.h" #include <iostream> #include <string> #include <stdio.h> #include <opencv2opencv.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 "); 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 "); 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"未正常获取彩色图 "); if (depthIm->AcquireAccess(PXCImage::ACCESS_READ, &depth_data) < PXC_STATUS_NO_ERROR) wprintf_s(L"未正常获取深度图 "); 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"); }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。