使用C++代码保存深度相机D435i的RGB图片,包含C++代码以及CMakeLists.txt

3 篇文章 0 订阅
1 篇文章 0 订阅

1.任务

    需要标定深度相机,那么我们就需要拿到深度相机所拍摄的图片,灰度图或者是彩色图。以下提供C++代码,用于提取深度相机所拍摄的图片,每隔2秒保存一次RGB图像。

编译语言: C++
编译工具: cmake
系统版本: ubuntu 18.04
主要环境: librealsense2, opencv2

2. 依赖环境安装

2.1 C++

    点我安装g++11.2与gdb
    点我安装cmake

2.2 librealsense2

    1)安装依赖包

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev

    2)拉取源码

mkdir librealsense_install
cd librealsense_install
git clone -b v2.50.0 https://github.com/IntelRealSense/librealsense.git

    3)安装权限脚本

cd librealsense
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger 

    4)编译

mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make -j
sudo make install

    5) 使用realsense 注:虚拟机usp设置大于3.0

realsense-viewer

    6)卸载realsense

dpkg -l | grep "realsense" | cut -d " " -f 3 | xargs sudo dpkg --purge

2.3 opencv2

    点我进入opencv2 安装

3.代码

CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.12)

project(video)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_FLAGS "-std=c++17")

# 查找OpenCV包
find_package(OpenCV REQUIRED)
# 寻找Intel RealSense SDK包
find_package(realsense2 REQUIRED)
find_package(Threads REQUIRED)

# 添加可执行文件
add_executable(video video.cpp)

target_compile_features(video PRIVATE cxx_std_17)

# 链接OpenCV库
target_link_libraries(video ${OpenCV_LIBS})
target_link_libraries(video realsense2)
target_link_libraries(video Threads::Threads)
target_link_libraries(video -lstdc++fs)

video.cpp 代码文件

#include <librealsense2/rs.hpp>
#include <opencv2/opencv.hpp>
#include <chrono>
#include <thread>

// 定义函数将RS2帧转换为OpenCV Mat
cv::Mat frame_to_mat(const rs2::frame& frame) {
    rs2::video_frame video_frame = frame.as<rs2::video_frame>();
    const int width = video_frame.get_width();
    const int height = video_frame.get_height();
    const int bpp = video_frame.get_bytes_per_pixel();
    return cv::Mat(cv::Size(width, height), CV_8UC(bpp), (void*)video_frame.get_data(), cv::Mat::AUTO_STEP);
}

int main() {
    rs2::pipeline pipe;
    rs2::config cfg;
    cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);
//    cfg.enable_stream(RS2_STREAM_COLOR);

    //    cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);

    // 启动管道
    pipe.start(cfg);

    int count = 0;
    while (true) {
        // 等待深度相机捕捉到帧
        rs2::frameset frameset = pipe.wait_for_frames();
        auto color_frame = frameset.get_color_frame();
//        auto depth_frame = frameset.get_depth_frame();

        // 将RS2帧转换为OpenCV Mat
        cv::Mat color_mat = frame_to_mat(color_frame);
//        cv::Mat depth_mat = frame_to_mat(depth_frame); // 添加深度图像处理

        std::cout << "Color image channels: " << color_mat.channels() << std::endl;
//        std::cout << "Depth image channels: " << depth_mat.channels() << std::endl;

        // 保存RGB图像和深度图像
        std::string color_filename = "color_image" + std::to_string(count) + ".png";
//        std::string depth_filename = "depth_image" + std::to_string(count) + ".png"; // 深度图像文件名

        cv::imwrite(color_filename, color_mat);
//        cv::imwrite(depth_filename, depth_mat); // 保存深度图像

//        std::cout << "Saved " << color_filename << " and " << depth_filename << std::endl;
        std::cout << "Saved " << color_filename << std::endl;

        // 每隔2秒保存一次图片
        std::this_thread::sleep_for(std::chrono::seconds(2));
        count++;
    }

    pipe.stop();

    return 0;
}

4.成功运行

    保存图片成功的截图
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

锦鲤AI幸运

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值