如何使用 C++ 和英特尔 API 将 .JSON 文件加载到 RealSense D435 相机
how to load .JSON file to RealSense D435 camera using C++ and intel API
我正在尝试调整我的深度相机 (RealSense D435) 以获取 better/different 深度数据。因此,我想按照 the intel SDK 中的解释,尝试使用来自英特尔建议参数配置的不同预设。 Intel 建议使用预设,不要 尝试自己调整和 fiddle 50 多个参数。
尽管我很想忽略英特尔的评论,但我什至无法 upload/read/process 作为 .JSON 文件 (C++) 提供的预设配置预设.有没有人能展示一个代码片段,其中 .JSON 文件成功地用于更改 Realsense D400 系列相机生成的深度图像的高级设置?
我找到了方法,这里是代码片段,包括一些必须放在 Main() 中的额外图像检索代码:
// Obtain a list of devices currently present on the system
context ctx;
auto devices = ctx.query_devices();
size_t device_count = devices.size();
if (!device_count)
{
cout <<"No device detected. Is it plugged in?\n";
return EXIT_SUCCESS;
}
// Get the first connected device
auto dev = devices[0];
// Enter advanced mode
if (dev.is<rs400::advanced_mode>())
{
// Get the advanced mode functionality
auto advanced_mode_dev = dev.as<rs400::advanced_mode>();
// Load and configure .json file to device
ifstream t("./presets/ShortRangePreset.json");
string str((istreambuf_iterator<char>(t)), istreambuf_iterator<char>());
advanced_mode_dev.load_json(str);
}
else
{
cout << "Current device doesn't support advanced-mode!\n";
return EXIT_FAILURE;
}
//Contruct a pipeline which abstracts the device
rs2::pipeline pipe;
rs2::device selected_device = dev;
auto depth_sensor = selected_device.first<rs2::depth_sensor>();
//Create a configuration for configuring the pipeline with a non default profile
rs2::config cfg;
//Add desired streams to configuration
cfg.enable_stream(RS2_STREAM_INFRARED, ImageWidth_px, ImageHeight_px, RS2_FORMAT_Y8, FrameRate);
cfg.enable_stream(RS2_STREAM_DEPTH, ImageWidth_px, ImageHeight_px, RS2_FORMAT_Z16, FrameRate);
//Instruct pipeline to start streaming with the requested configuration
pipe.start(cfg);
// Camera warmup - dropping several first frames to let auto-exposure stabilize
rs2::frameset frames;
for(int i = 0; i < 5; i++)
{
//Wait for all configured streams to produce a frame
frames = pipe.wait_for_frames();
}
bool quit = false;
char key;
while (!quit){
frames = pipe.wait_for_frames();
//Get each frame
rs2::frame ir_frame = frames.first(RS2_STREAM_INFRARED);
rs2::depth_frame depth_frame = frames.get_depth_frame();
// Creating OpenCV matrix from IR image
Mat ir (Size(ImageWidth_px, ImageHeight_px), CV_8UC1, (void*)ir_frame.get_data(), Mat::AUTO_STEP);
Mat depth (Size(ImageWidth_px, ImageHeight_px), CV_16UC1, (void*)depth_frame.get_data(), Mat::AUTO_STEP);
// etc the rest of your code on how you want to edit/process the images
}
我正在尝试调整我的深度相机 (RealSense D435) 以获取 better/different 深度数据。因此,我想按照 the intel SDK 中的解释,尝试使用来自英特尔建议参数配置的不同预设。 Intel 建议使用预设,不要 尝试自己调整和 fiddle 50 多个参数。
尽管我很想忽略英特尔的评论,但我什至无法 upload/read/process 作为 .JSON 文件 (C++) 提供的预设配置预设.有没有人能展示一个代码片段,其中 .JSON 文件成功地用于更改 Realsense D400 系列相机生成的深度图像的高级设置?
我找到了方法,这里是代码片段,包括一些必须放在 Main() 中的额外图像检索代码:
// Obtain a list of devices currently present on the system
context ctx;
auto devices = ctx.query_devices();
size_t device_count = devices.size();
if (!device_count)
{
cout <<"No device detected. Is it plugged in?\n";
return EXIT_SUCCESS;
}
// Get the first connected device
auto dev = devices[0];
// Enter advanced mode
if (dev.is<rs400::advanced_mode>())
{
// Get the advanced mode functionality
auto advanced_mode_dev = dev.as<rs400::advanced_mode>();
// Load and configure .json file to device
ifstream t("./presets/ShortRangePreset.json");
string str((istreambuf_iterator<char>(t)), istreambuf_iterator<char>());
advanced_mode_dev.load_json(str);
}
else
{
cout << "Current device doesn't support advanced-mode!\n";
return EXIT_FAILURE;
}
//Contruct a pipeline which abstracts the device
rs2::pipeline pipe;
rs2::device selected_device = dev;
auto depth_sensor = selected_device.first<rs2::depth_sensor>();
//Create a configuration for configuring the pipeline with a non default profile
rs2::config cfg;
//Add desired streams to configuration
cfg.enable_stream(RS2_STREAM_INFRARED, ImageWidth_px, ImageHeight_px, RS2_FORMAT_Y8, FrameRate);
cfg.enable_stream(RS2_STREAM_DEPTH, ImageWidth_px, ImageHeight_px, RS2_FORMAT_Z16, FrameRate);
//Instruct pipeline to start streaming with the requested configuration
pipe.start(cfg);
// Camera warmup - dropping several first frames to let auto-exposure stabilize
rs2::frameset frames;
for(int i = 0; i < 5; i++)
{
//Wait for all configured streams to produce a frame
frames = pipe.wait_for_frames();
}
bool quit = false;
char key;
while (!quit){
frames = pipe.wait_for_frames();
//Get each frame
rs2::frame ir_frame = frames.first(RS2_STREAM_INFRARED);
rs2::depth_frame depth_frame = frames.get_depth_frame();
// Creating OpenCV matrix from IR image
Mat ir (Size(ImageWidth_px, ImageHeight_px), CV_8UC1, (void*)ir_frame.get_data(), Mat::AUTO_STEP);
Mat depth (Size(ImageWidth_px, ImageHeight_px), CV_16UC1, (void*)depth_frame.get_data(), Mat::AUTO_STEP);
// etc the rest of your code on how you want to edit/process the images
}