I'm trying to tune my depth camera (RealSense D435) to get better/different depth data. Therefore i want to experiment with the different pre sets from intel's adviced parameter configuration as explained in the intel SDK. Intel advices to use the pre sets and to not try to tune and fiddle with the 50+ paramaters yourself.
As much as i'd like to ignore that comment of intel, i am unable to even upload/read/process the pre set configuration pre sets which are provided as a .JSON file (C++). Is anyone able to show a code snippet in which a .JSON file is succesfully used to change the advanced settings of the generated depth image of a Realsense D400 series camera?
I found out how to do it and here is the code snippet including some extra image retrieving code that has to be put in 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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With