• realsenseD435采集图片


    依赖opencv,我这里用的412

      1 #include <librealsense2/rs.hpp>
      2 
      3 #include<iostream>
      4 
      5 // include OpenCV header file
      6 #include <opencv2/opencv.hpp>
      7 using namespace cv;
      8 
      9 #define RS_WIDTH 640
     10 #define RS_HEIGHT 480
     11 #define RS_FPS 60
     12 
     13 
     14 int main(int argc, char** argv) try
     15 {
     16     // judge whether devices is exist or not
     17     rs2::context ctx;
     18     auto list = ctx.query_devices(); // Get a snapshot of currently connected devices
     19     if (list.size() == 0)
     20         throw std::runtime_error("No device detected. Is it plugged in?");
     21     rs2::device dev = list.front();
     22 
     23     //
     24     rs2::frameset frames;
     25     //Contruct a pipeline which abstracts the device
     26     rs2::pipeline pipe;//创建一个通信管道//https://baike.so.com/doc/1559953-1649001.html pipeline的解释
     27     //Create a configuration for configuring the pipeline with a non default profile
     28     rs2::config cfg;//创建一个以非默认配置的配置用来配置管道
     29     //Add desired streams to configuration
     30     cfg.enable_stream(RS2_STREAM_COLOR, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_BGR8, RS_FPS);//向配置添加所需的流
     31     cfg.enable_stream(RS2_STREAM_DEPTH, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_Z16, RS_FPS);
     32     cfg.enable_stream(RS2_STREAM_INFRARED, 1, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_Y8, RS_FPS);
     33     cfg.enable_stream(RS2_STREAM_INFRARED, 2, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_Y8, RS_FPS);
     34 
     35     // get depth scale
     36     // float depth_scale = get_depth_scale(profile.get_device());
     37 
     38     // start stream
     39     pipe.start(cfg);//指示管道使用所请求的配置启动流
     40 
     41     int c = 0;
     42 
     43     while (true)
     44     {
     45         frames = pipe.wait_for_frames();//等待所有配置的流生成框架
     46 
     47         // Align to depth
     48         /*rs2::align align_to_depth(RS2_STREAM_DEPTH);*/
     49         rs2::align align_to_depth(rs2_stream::RS2_STREAM_COLOR);
     50         frames = align_to_depth.process(frames);
     51 
     52         //Get each frame
     53         rs2::frame color_frame = frames.get_color_frame();
     54         rs2::frame depth_frame = frames.get_depth_frame();
     55         rs2::video_frame ir_frame_left = frames.get_infrared_frame(1);
     56         rs2::video_frame ir_frame_right = frames.get_infrared_frame(2);
     57 
     58 
     59         // Creating OpenCV Matrix from a color image
     60         Mat color(Size(RS_WIDTH, RS_HEIGHT), CV_8UC3, (void*)color_frame.get_data(), Mat::AUTO_STEP);
     61         Mat pic_right(Size(RS_WIDTH, RS_HEIGHT), CV_8UC1, (void*)ir_frame_right.get_data());
     62         Mat pic_left(Size(RS_WIDTH, RS_HEIGHT), CV_8UC1, (void*)ir_frame_left.get_data());
     63         Mat pic_depth(Size(RS_WIDTH, RS_HEIGHT), CV_16U, (void*)depth_frame.get_data(), Mat::AUTO_STEP);
     64 
     65         // Display in a GUI
     66         namedWindow("Display Image", WINDOW_AUTOSIZE);
     67         imshow("Display Image", color);
     68         waitKey(1);
     69         imshow("Display depth", pic_depth * 15); // *15 for show
     70         waitKey(1);
     71         imshow("Display pic_left", pic_left);
     72         waitKey(1);
     73         imshow("Display pic_right", pic_right);
     74         waitKey(1);
     75 
     76         std::string dir = "D:\\Data\\6DOF\\";
     77         if (c >= 100)
     78         {
     79             if (cv::imwrite(dir + "color\\color-" + std::to_string(c) + ".png", color) &&
     80                 cv::imwrite(dir + "depth\\depth-" + std::to_string(c) + ".png", pic_depth))
     81             {
     82                 std::cout << std::to_string(c) << "st depth;  " << std::to_string(c) << "st color" << std::endl;
     83             }
     84         }
     85 
     86         c++;
     87     }
     88     return 0;
     89 }
     90 
     91 // error
     92 catch (const rs2::error & e)
     93 {
     94     std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;
     95     return EXIT_FAILURE;
     96 }
     97 catch (const std::exception& e)
     98 {
     99     std::cerr << e.what() << std::endl;
    100     return EXIT_FAILURE;
    101 }

    简单封装下:

    realsense.h

     1 #pragma once
     2 #ifndef REALSENSE_H
     3 #define REALSENSE_H
     4 
     5 #include<librealsense2/rs.hpp>
     6 #define RS_WIDTH 640
     7 #define RS_HEIGHT 480
     8 #define RS_FPS 60 // 调太高导致相机初始化失败
     9 
    10 
    11 class RealSense
    12 {
    13 public:
    14     RealSense();
    15 
    16     void GetFrames();
    17 
    18     ~RealSense();
    19 
    20 private:
    21     rs2::context ctx;
    22 
    23     rs2::frameset frames;
    24     
    25     rs2::pipeline pipe;
    26     
    27     rs2::config cfg;
    28 
    29 public:
    30     rs2::frame color_frame;
    31 
    32     rs2::frame depth_frame;
    33 
    34 };
    35 
    36 #endif
    View Code

    realsense.cpp

     1 #include"realsense.h"
     2 
     3 
     4 RealSense::RealSense()
     5 {
     6     auto list = ctx.query_devices();
     7     if (list.size() == 0)
     8         throw std::runtime_error("No device detected. Is it plugged in?");
     9     //Add desired streams to configuration
    10     cfg.enable_stream(RS2_STREAM_COLOR, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_BGR8, RS_FPS);
    11     cfg.enable_stream(RS2_STREAM_DEPTH, RS_WIDTH, RS_HEIGHT, RS2_FORMAT_Z16, RS_FPS);
    12 
    13     pipe.start(cfg);
    14 }
    15 
    16 void RealSense::GetFrames()
    17 {
    18     this->frames = this->pipe.wait_for_frames();//等待所有配置的流生成框架
    19 
    20     // Align to depth
    21     rs2::align align_to_depth(rs2_stream::RS2_STREAM_COLOR);
    22     this->frames = align_to_depth.process(this->frames);
    23 
    24     //Get each frame
    25     this->color_frame = frames.get_color_frame();
    26     this->depth_frame = frames.get_depth_frame();
    27 
    28 }
    29 
    30 RealSense::~RealSense()
    31 {
    32 }
    View Code

    test.cpp

     1 #include<iostream>
     2 #include<chrono>
     3 #include <opencv2/opencv.hpp>
     4 using namespace cv;
     5 #include"realsense.h"
     6 
     7 
     8 int main(int argc, char** argv) 
     9 {
    10     RealSense RS;
    11 
    12     while (true)
    13     {
    14         std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();
    15         
    16         RS.GetFrames();
    17 
    18         // -> OpenCV
    19         Mat color(cv::Size(RS_WIDTH, RS_HEIGHT), CV_8UC3, (void*)RS.color_frame.get_data(), cv::Mat::AUTO_STEP);
    20         Mat depth(cv::Size(RS_WIDTH, RS_HEIGHT), CV_16U, (void*)RS.depth_frame.get_data(), cv::Mat::AUTO_STEP);
    21 
    22         // Display in a GUI
    23         namedWindow("Display Image", WINDOW_AUTOSIZE);
    24         imshow("Display Image", color);
    25         waitKey(1);
    26         imshow("Display depth", depth * 15); // *15 for show
    27         waitKey(1);
    28 
    29         std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();
    30         std::chrono::duration<double> time_used = std::chrono::duration_cast<std::chrono::duration<double>>(t2 - t1);
    31         std::cout << "the cost of time:" << 1000 * time_used.count() << " milliseconds." << std::endl;
    32     }
    33     return 0;
    34 }
    View Code

    按照时间戳保存

     1 #include <librealsense2/rs.hpp>
     2 
     3 
     4 #include <iostream>
     5 #include<string>
     6 #include<Windows.h>
     7 #include<opencv2/opencv.hpp>
     8 
     9 #define width 640
    10 #define height 480
    11 #define fps 30
    12 
    13 int main()
    14 {
    15     // timestamp 
    16     SYSTEMTIME st = { 0 };
    17     // 
    18     std::string dir = "F:\\Dataset\\cube\\";
    19     std::string png = ".png";
    20 
    21     // judge whether devices is exist or not
    22     rs2::context ctx;
    23     auto list = ctx.query_devices(); // Get a snapshot of currently connected devices
    24     if (list.size() == 0)
    25         throw std::runtime_error("No device detected. Is it plugged in?");
    26     rs2::device dev = list.front();
    27     //
    28     rs2::frameset frames;
    29     rs2::pipeline pipe;
    30     rs2::config cfg;
    31     //Add desired streams to configuration
    32     cfg.enable_stream(RS2_STREAM_COLOR, width, height, RS2_FORMAT_BGR8, fps);//向配置添加所需的流
    33     cfg.enable_stream(RS2_STREAM_DEPTH, width, height, RS2_FORMAT_Z16, fps);
    34     // start stream
    35     pipe.start(cfg);//指示管道使用所请求的配置启动流
    36     while (true)
    37     {
    38         frames = pipe.wait_for_frames();//等待所有配置的流生成框架
    39 
    40         // Align to depth
    41         rs2::align align_to_depth(rs2_stream::RS2_STREAM_COLOR);
    42         frames = align_to_depth.process(frames);
    43 
    44         //Get each frame
    45         rs2::frame color_frame = frames.get_color_frame();
    46         rs2::frame depth_frame = frames.get_depth_frame();
    47         rs2::video_frame ir_frame_left = frames.get_infrared_frame(1);
    48         rs2::video_frame ir_frame_right = frames.get_infrared_frame(2);
    49 
    50 
    51         // Creating OpenCV Matrix from a color image
    52         cv::Mat color(cv::Size(width, height), CV_8UC3, (void*)color_frame.get_data(), cv::Mat::AUTO_STEP);
    53         cv::Mat pic_depth(cv::Size(width, height), CV_16U, (void*)depth_frame.get_data(), cv::Mat::AUTO_STEP);
    54 
    55         // Display in a GUI
    56         cv::namedWindow("Display Image", cv::WINDOW_AUTOSIZE);
    57         imshow("Display Image", color);
    58         //cv::waitKey(1);
    59         //cv::imshow("Display depth", pic_depth * 15); // *15 for show
    60         //cv::waitKey(1);    
    61 
    62         // 按照时间戳保存
    63         GetLocalTime(&st);
    64         std::string t = std::to_string(st.wYear) +
    65             std::to_string(st.wMonth) +
    66             std::to_string(st.wDay) +
    67             std::to_string(st.wHour) +
    68             std::to_string(st.wMinute) +
    69             std::to_string(st.wSecond) +
    70             std::to_string(st.wMilliseconds);
    71         //std::cout << t << std::endl;
    72         if (cv::waitKey(1) == 'C')
    73         {
    74             cv::imwrite(dir + t + png, color);
    75         }
    76         
    77 
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    HearthBuddy投降插件2019-11-01的使用
    正则表达式在线分析 regex online analyzer
    Tips to write better Conditionals in JavaScript
    The fileSyncDll.ps1 is not digitally signed. You cannot run this script on the current system.
    Cannot capture jmeter traffic in fiddler
    JMETER + POST + anti-forgery token
    input type color
    HearthBuddy修改系统时间
    What are all the possible values for HTTP “Content-Type” header?
    UDK性能优化
  • 原文地址:https://www.cnblogs.com/tensorrt/p/13602413.html
Copyright © 2020-2023  润新知