как загрузить файл .JSON в камеру RealSense D435 с помощью C ++ и Intel API - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь настроить глубину камеры (RealSense D435), чтобы получить более качественные / разные данные глубины.Поэтому я хочу поэкспериментировать с различными предустановками из рекомендуемой конфигурации параметров Intel, как описано в intel SDK .Intel советует использовать предустановки и , а не . Попытайтесь самостоятельно настроить и настроить параметры 50+.

Столько, сколько я хотел бы проигнорировать этот комментарий Intel, яневозможно даже загрузить / прочитать / обработать предварительно установленные предварительные настройки конфигурации, которые предоставляются в виде файла .JSON (C ++).Может ли кто-нибудь показать фрагмент кода, в котором файл .JSON успешно используется для изменения расширенных настроек сгенерированного изображения глубины камеры серии Realsense D400?

1 Ответ

0 голосов
/ 05 декабря 2018

Я узнал, как это сделать, и вот фрагмент кода, включающий некоторый дополнительный код для извлечения изображений, который должен быть помещен в 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
        }
...