硬件

相机的原理我了解的也不甚多,看到一篇讲的很好的文章,就在这里引用了~

SR300设备的红外线发射器(IR Laser Projector)发射的“结构光”,经物体反射后会被红外线传感器(IR Camera Lens)接收。由于红外线到反射物体表面的距离不同,红外传感器捕到的“结构光”图案的位置和形状会发生变化,根据这些由实感图像处理芯片就能计算出物体表面的空间信息,再用三角测距原理进行“深度”计算,进而重现3D场景。
————————————————
版权声明:本文为CSDN博主「codekiller_」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/codekiller_/article/details/63685891

获取参数c代码

秉持着对c语言深深的热爱,我还是用c写了获取内参等硬件参数的代码。

#include <librealsense2/rs.hpp> // Include RealSense Cross Platform API
#include<iostream>
#include<opencv2/opencv.hpp>float get_depth_scale(rs2::device dev)
{    // Go over the device's sensors    for (rs2::sensor& sensor : dev.query_sensors())    {       // Check if the sensor if a depth sensor        if (rs2::depth_sensor dpt = sensor.as<rs2::depth_sensor>())  {            return dpt.get_depth_scale();        }    }    throw std::runtime_error("Device does not have a depth sensor");
}
int main(int argc, char * argv[]) try
{rs2::log_to_console(RS2_LOG_SEVERITY_ERROR);rs2::context ctx;auto devs = ctx.query_devices();                  ///获取设备列表int device_num = devs.size();std::cout << "device num: " << device_num << std::endl;///设备数量rs2::device dev = devs[0];char serial_number[100] = { 0 };strcpy(serial_number, dev.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER));printf("serial_number: %s\n", serial_number);rs2::config cfg;cfg.enable_stream(RS2_STREAM_COLOR, 640, 480, RS2_FORMAT_BGR8, 30);///配置深度图像流:分辨率640*480,图像格式:Z16, 帧率:30帧/秒cfg.enable_stream(RS2_STREAM_DEPTH, 640, 480, RS2_FORMAT_Z16, 30);///生成Realsense管道,用来封装实际的相机设备rs2::pipeline pipe;pipe.start(cfg); ///根据给定的配置启动相机管道//获取深度比例系数rs2::pipeline_profile profile = pipe.start(cfg);;float depth_scale = get_depth_scale(profile.get_device());printf("deep_scale:%f\n", depth_scale);system("pause");rs2::frameset data;data = pipe.wait_for_frames();///等待一帧数据,默认等待5srs2::depth_frame depth = data.get_depth_frame(); ///获取深度图像数据rs2::video_frame color = data.get_color_frame();  ///获取彩色图像数据rs2::stream_profile dprofile = depth.get_profile();rs2::stream_profile cprofile = color.get_profile();///获取彩色相机内参rs2::video_stream_profile cvsprofile(cprofile);rs2_intrinsics color_intrin = cvsprofile.get_intrinsics();std::cout << "\ncolor intrinsics: ";std::cout << color_intrin.width << "  " << color_intrin.height << "  ";std::cout << color_intrin.ppx << "  " << color_intrin.ppy << "  ";std::cout << color_intrin.fx << "  " << color_intrin.fy << std::endl;std::cout << "coeffs: ";for (auto value : color_intrin.coeffs)std::cout << value << "  ";std::cout << std::endl;std::cout << "distortion model: " << color_intrin.model << std::endl;///畸变模型///获取深度相机内参rs2::video_stream_profile dvsprofile(dprofile);rs2_intrinsics depth_intrin = dvsprofile.get_intrinsics();std::cout << "\ndepth intrinsics: ";std::cout << depth_intrin.width << "  " << depth_intrin.height << "  ";std::cout << depth_intrin.ppx << "  " << depth_intrin.ppy << "  ";std::cout << depth_intrin.fx << "  " << depth_intrin.fy << std::endl;std::cout << "coeffs: ";for (auto value : depth_intrin.coeffs)std::cout << value << "  ";std::cout << std::endl;std::cout << "distortion model: " << depth_intrin.model << std::endl;///畸变模型///获取深度相机相对于彩色相机的外参,即变换矩阵: P_color = R * P_depth + Trs2_extrinsics extrin = dprofile.get_extrinsics_to(cprofile);std::cout << "\nextrinsics of depth camera to color camera: \nrotaion: " << std::endl;for (int i = 0; i < 3; ++i){for (int j = 0; j < 3; ++j) {float value = extrin.rotation[3 * i + j];std::cout << value << "  ";}std::cout << std::endl;}std::cout << std::endl;std::cout << "translation: ";for (auto value : extrin.translation)std::cout << value << "  ";std::cout << std::endl;while (1){///等待一帧数据,默认等待5sdata = pipe.wait_for_frames();rs2::depth_frame depth = data.get_depth_frame(); ///获取深度图像数据rs2::video_frame color = data.get_color_frame();  ///获取彩色图像数据int color_width = color.get_width();int color_height = color.get_height();int depth_width = depth.get_width();int depth_height = depth.get_height();if (!color || !depth) break;                ///如果获取不到数据则退出///将彩色图像和深度图像转换为Opencv格式cv::Mat image(cv::Size(color_width, color_height), CV_8UC3, (void*)color.get_data(), cv::Mat::AUTO_STEP);cv::Mat depthmat(cv::Size(depth_width, depth_height), CV_16U, (void*)depth.get_data(), cv::Mat::AUTO_STEP);///显示cv::imshow("image", image);cv::imshow("depth", depthmat);cv::waitKey(1);}system("pause");return EXIT_SUCCESS;
}
catch (const rs2::error & e)
{///捕获相机设备的异常std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n    " << e.what() << std::endl;system("pause");return EXIT_FAILURE;
}
catch (const std::exception& e)
{std::cerr << "Other error : " << e.what() << std::endl;system("pause");return EXIT_FAILURE;
}

RealSense SR300 坑4米 获取相机参数相关推荐

  1. 用python开启相机_如何用Python打开realsenseD435相机并获取相机参数

    如何用Python打开realsenseD435相机 import pyrealsense2 as rs import numpy as np import cv2 if __name__ == &q ...

  2. 如何用Python打开realsenseD435相机并获取相机参数

    D435相机正面有四个圆孔,如下图所示,从左向右,第一和第三个是红外传感器(IR Stereo Cameral):第二个是红外激光发射器(IR Projector),第四个是彩色相机(色彩传感器). ...

  3. Python OpenCV相机参数:如何获取和修改相机参数

    Python OpenCV相机参数:如何获取和修改相机参数 OpenCV是一个广泛使用的计算机视觉库,它提供了丰富的图像处理功能.在许多应用场景中,我们需要对相机进行参数设置,例如调整曝光时间.增益. ...

  4. 相机寻找最适合分辨率android,ARCore:获取相机的分辨率(ARCore : Get Camera's resolution)...

    ARCore:获取相机的分辨率(ARCore : Get Camera's resolution) 有没有办法获得相机的分辨率? (除非从头开始使用Android)我没有在session.setDis ...

  5. cesium获取相机状态

    每次setViewer时,总是有心无力,在网上也是各种方法各种试,测试之后,这个中心点坐标好像不好确定. 还可在F12控制台打印viewer.camera.position等及pitch,roll,p ...

  6. realsense ——SR300 相机使用小记

    环境搭建相关的参考资料挺多的,这里就不多说了.这里记一些相关的api. 算了,还是给出自己的配置记录吧https://blog.csdn.net/hehehetanchaow/article/deta ...

  7. Intel realsense SR300深度图获取点云和点云投影至图像全流程

    从深度图获取点云 之前用的方法一直都是利用深度图的像素坐标(x,y)和像素值z自行计算点云,代码如下 for (int m = 0; m < depth.rows; m++){for (int ...

  8. nginx 获取body参数_分布式实战:Nginx缓存之流量分发层

    本文首发于Ressmix个人站点:https://www.tpvlog.com 本章,我将进行Nginx流量分发层的lua代码编写.流量分发层的Nginx服务器,会基于商品id执行流量分发策略: 获取 ...

  9. Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机设备的各种固件信息如DeviceID或者SerialNumber等(C++)

    项目场景 Baumer工业相机堡盟相机是一种高性能.高质量的工业相机,可用于各种应用场景,如物体检测.计数和识别.运动分析和图像处理. Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分 ...

最新文章

  1. 英特尔核芯显卡控制面板没有了_【有趣】第41期:被英特尔取消发售的CPU长啥样?...
  2. android 电池栏的高度,Android如何取得状态栏、任务栏高度
  3. LeetCode MySQL 1511. Customer Order Frequency
  4. 医生的小助手,医疗AI赋能诊断新冠肺炎新方案!
  5. 搭建个人博客,还有比这更快的?
  6. 微信小程序教学第三章(含视频):小程序中级实战教程:列表-静态页面制作...
  7. 模糊C均值聚类 C++代码
  8. 一句话木马拿Shell与菜刀原理
  9. maven 国内源配置
  10. 使用py2exe的简单指南
  11. acm国家集训队论文(1999-2009)
  12. checkbox 选中未选中赋值 以及是否选中状态判断
  13. laravel 5.6 请教邮件中的cc,bcc是什么意思,有什么用?
  14. android tabhost黑色背景,怎么设置tabhost的背景颜色
  15. 世界500强面试题----数学能力
  16. 井字棋小游戏c语言简单编码,井字棋小游戏(C语言)
  17. 2019年1月18日假期日记
  18. Word中在纵向页中插入横向页的操作方法
  19. 微软重新追求雅虎 但不涉及整体收购
  20. Ubuntu 12.04 安装 skype

热门文章

  1. WinForm下ComboBox设定SelectedValue总结
  2. 目标检测、目标分割:常用框架与流程(流程包括:数据集标注与格式预处理、训练与推理、训练优化、算法代码以及原理)
  3. mysql实现(工资管理系统)课程设计
  4. flutter 九宫格菜单_flutter九宫格看图加强版
  5. 艾尔之光为什么总服务器无响应,大陆《艾尔之光》何时开放测试
  6. html 仿 设置多个闹钟,设置闹钟重复时间.html
  7. 青萍之末 光伏“抢屋顶”风潮来袭
  8. 张家港c语言培训班,张家港13岁自闭症儿童小江对编程有特长。你可以教他吗?...
  9. html怎么把视频设置为背景,如何将视频设置为网页背景
  10. 隐马尔可夫模型(HMM) - 2 - 概率计算方法