RealSense SR300 坑4米 获取相机参数

2023-05-16

硬件

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

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();///等待一帧数据,默认等待5s

	rs2::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 + T
	 rs2_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)
	 {
		  ///等待一帧数据,默认等待5s
		  data = 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RealSense SR300 坑4米 获取相机参数 的相关文章

  • TX2安装realsense SDK和librealsense

    官网https github com IntelRealSense librealsense安装很简单 xff0c 一定要对应好SDK与ros包 realsense固件的版本 https github com IntelRealSense
  • 解决Realsense摄像头插着开机后,需要重新插拔程序才能正常工作

    安装 uhubctl 的过程 span class token function sudo span span class token function apt get span span class token function inst
  • TX2配置RealSense D455相机SDK和ros驱动

    TX2配置RealSense D455相机SDK和ros驱动 1 SDK安装2 RealSense ros安装3 bug及解决3 1 realsense viewer显示usb2 13 2 Could not found ddynamic
  • realsense D435i双目IMU 数据集

    realsense D435i 双目IMU数据集 使用双目 43 IMU的数据双目内参双目IMU外参 使用双目 43 IMU的数据 双目内参 model type PINHOLE camera name camera image width
  • Realsense D435保存图像

    你可以走慢一点 xff0c 但脚步不能停下来 Realsense是我使用的第3款深度传感器 xff0c 前两款分别是Orbbec和Kinect v2 xff0c 奥比中光的深度传感器只需要USB接口 xff0c 但深度图的效果并不好 xff
  • 获取realsense内参

    文章目录 xff11 xff0e 无畸变 xff12 xff0e Brown Conrady 畸变模型3 Opencv 里畸变图像矫正过程 xff11 xff0e 无畸变 相机内参包括相机矩阵参数和畸变系数 相机内参矩阵为3 3的矩阵 xf
  • SR300说明书

    xff08 1 xff09 基本信息 xff1a 深度捕获范围 xff1a 从0 2到1 5米 红外 xff08 IR xff09 激光投影仪系统 同步深度 xff0c 颜色 xff0c 红外视频 深度到颜色的纹理映射 深度不参与世界坐标
  • ubuntu 16.04使用IntelRealSense D435i调用realsense ROS包时,报symbol lookup error和undefined symbol错误的解决办法

    在ubuntu 16 04使用IntelRealSense D435i调用realsense ROS包时 xff0c 运行 roscore roslaunch realsense2 camera rs rgbd launch 出现错误 xf
  • Melodic + Realsense D435i 配置及错误问题解决

    Melodic 43 Realsense D435i 配置及错误问题解决 安装环境 xff1a RealSense SDK安装1 克隆SDK2 安装相关依赖3 安装权限脚本4 进行编译与安装5 测试安装是否成功6 错误汇总0x01 进行编译
  • matlab读取realsense bag文件数据

    代码参考 xff1a https dev intelrealsense com docs matlab wrapper 本示例的功能 xff1a matlab代码 xff1a 给出bag文件路径 xff0c 显示realsense相机型号
  • RealSense二次开发

    转载 xff1a librealsense2查看相机设备信息 JavaShuo 文章目录 1 librealsense2设备信息读取 xff12 xff0e realsense 投影函数和反投影函数3 深度相机与彩色相机的坐标变换 1 li
  • realsense r200使用过程记录

    realsense r200 相机 采用的结构光 43 双目立体视觉 xff0c 使用可以使用室外场景 xff0c 但是有些注意的事项 xff0c 该款相机在sdk 方面貌似总有些bug 相比之前的测过的zed astra kinectv1
  • Realsense L515使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 主要参考二 基本情况 xff08 一 xff09 ubuntu和ROS情况 xff08 二 xff09 主要步骤 总结
  • Ubuntu安装RealSense驱动SDK

    Ubuntu安装RealSense驱动SDK 参考链接 官方链接 1 添加key span class token function sudo span apt key adv span class token parameter vari
  • 运行Intel realsense L515相机

    运行Intel realsense L515相机 首先去官 https www intelrealsense com sdk 2 xff0c 按照上面的提示安装各种文件 xff0c 然后输入realsense viewer出现可视化窗口 下
  • A1&AlienGo--通过realsense-viewer调用相机

    使用机器狗时 xff0c 有时需要通过NX 树莓派上的系统来查看调用相机 xff0c 可以通过realsense提供的realsense viewer来查看 但是机器狗自带的视觉程序会开机自启占用相机 xff0c 所以首先需要杀掉这个进程
  • 使用Realsense测试aruco_ros包

    01 准备工作 安装realsense ros安装aruco ros span class token builtin class name cd span ur ws src span class token function git s
  • intel realsense 深度视野范围与模组硬件说明

    文章目录 4 4 距离 xff08 Z xff09 处的深度视场4 5 无效深度带4 6 最小测量深度4 7 深度质量规范4 8 深度起点 xff08 地面零点参考 xff09 4 8 1 深度原点X Y坐标 7 2 视觉处理器D4板外形7
  • Ubuntu 18.04 ———(Intel RealSense D435i)运行VINS-Mono

    Intel RealSense D435i 一 准备工作二 修改参数rs camera launchrealsense color config yaml 参考文献 一 准备工作 1 Intel Realsense D435i Ubuntu
  • 树莓派4B Ubuntu20.04 ROS2 DSO realsense d455

    在git上下载dso 并编译 opencv version 61 4 2 0 span class token builtin class name cd span lib dso dso span class token function

随机推荐

  • opencv 环境相关

    拷贝志强服务器的环境需要配置下opencv 安装opencv的一些依赖项 xff0c 防止编译不通过 1 拷贝的库放在 opt下 xff0c 改名字为libs x64 2 安装opencv的依赖项 sudo apt get install
  • ROS CMakeLists 写法

    SET CMAKE BUILD TYPE 34 Debug 34 SET CMAKE CXX FLAGS DEBUG 34 ENV CXXFLAGS O0 Wall g ggdb 34 SET CMAKE CXX FLAGS RELEASE
  • SLAM中的小工具

    g2o中有用的小工具 ifndef G2O STUFF MISC H define G2O STUFF MISC H include 34 macros h 34 include lt cmath gt ifndef M PI define
  • Windows中公用网络与专用网络的区别

    当我们第一次打开一个Windows网络应用程序时 xff0c 会弹出选择网络类型 xff1a 专用网络 xff0c 公用网络 这个的确令人费解 xff0c 相信很多人都不知所措过 有的人干脆都选上 xff0c 这样就避免了被防火墙挡住 这里
  • ubuntu服务器修改ssh登录用户名及端口

    1 如果默认的ssh登录用户名为ubuntu xff0c 需要开通root账户 xff0c 添加密码 xff1a passwd root 还需修改配置 xff0c 具体方法 xff1a vi etc ssh sshd config 确保一下
  • 针对Android MediaCodec解码延时问题的替代解决方案

    如题 xff0c 本人在jni层实现了avc hevc的解码 xff0c 避免了在java上层调用系统的MediaCodec解码出现的延时问题 xff0c 完美支持1080P xff0c 4K xff08 具体看手机性能 xff09 xff
  • 系统环境变量path的列表不见了

    如题 xff0c 在编辑系统环境变量时 xff0c 发现path的环境变量原先是列表显示的 xff0c 看起来比较清晰 xff0c 而现在变成了一个文本框了 xff0c 就不那么一目了然了 于是在网上找到下面这个文章 xff0c 能很好解决
  • gazebo(1):gazebo常见问题及解决办法

    目录 1 将自己创建的gazebo模型导入后 xff0c 模型不停得抖动 xff0c 翻转 2 save world as 之后卡死 3 下载gazebo官方模型 xff1a 4 gazebo更新后无法打开 5 运行gazebo后报错 6
  • Makefile中的$(1)是什么

    Linux工程的编译要用到make工具 xff0c 平台不一样 xff0c 只是工具链不同 xff0c 但Makefile是编译系统的关键所在 xff0c 因此掌握Makefile的编写规则是非常重要的 尽管有了cmake这样更容易使用的编
  • gl的矩阵模式及其相应的矩阵变换函数

    以Android的GL10为例 xff0c 说明一下矩阵模式及其相应的矩阵变换函数 矩阵模式一共分为两种 xff1a gl glMatrixMode GL10 GL MODELVIEW 和 gl glMatrixMode GL10 GL P
  • 对md5sum程序的修改

    linux下自带md5sum工具 xff0c 可以对文件计算md5值 xff0c 但这个命令行工具不能直接对字符串求md5 xff0c 而对一个字符串求md5是一个比较有用的需求 xff0c 比如计算签名 于是对源码md5sum c修改了一
  • 物联网通信协议——比较-MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP

    原文链接 xff1a https blog csdn net lightrain0 article details 84343857 AMQP amp MQTT amp DDS https www youtube com watch v 6
  • 门电路逻辑符号大全(三态门,同或门,异或门,或非门,与或非门, 传输门,全加器,半加器等)

    最近要研究一下滤波器设计的无乘法器的实现 xff0c 所以要学习一下加法器的电路 xff0c 丢了一段时间 xff0c 忘的差不多了 xff0c 这里罗列一下常用的门电路的符号 这是一个1位全加器的数字电路组成 xff1a 以下两幅图可以复
  • 实函数傅里叶变换的奇偶虚实特性

    本文内容来源于他人的PPT xff0c 经本人整理而成 xff0c 算是对数字信号处理的复习吧 而实偶函数的傅里叶变换仍然是一个实偶函数的性质正是DCT的基础 xfeff xfeff
  • 多面体及欧拉公式及广义欧拉公式

    像正方体 xff0c 四棱锥这样的平面多面体属于简单多面体 xff0c 它们可以与球拓扑同构 xff0c 即可以连续拓扑变换成一个球 它们满足欧拉公式 xff1a v e 43 f 61 2 其中v是顶点 xff08 vertex xff0
  • mysql在表的某一位置增加一列的命令

    如果想在一个已经建好的表中添加一列 xff0c 可以用诸如 xff1a alter table t1 add column addr varchar 20 not null 这条语句会向已有的表t1中加入一列addr xff0c 这一列在表
  • tar命令中的-C作用

    tar xzvf abc tar gz C tmp 上面的命令将abc tar gz这个压缩包解压到当前目录下的tmp目录下 xff0c 而不是当前目录下 xff0c 这就是 C选项的作用
  • Java多线程

    一 基础概念 1 CPU核心数和线程数 多核心指的是单芯片多处理器 xff0c 将多个CPU集成到同一个芯片内 xff0c 不同的CPU可以单独的运行程序 目前主流的CPU有四核 六核 八核 增加核心数目的是为了增加线程数 xff0c 一般
  • ros(23):接收rviz中的2D Nav Goal、2D Pose Estimate消息

    1 rviz 教程 1 1 2D Nav Goal 2D Nav Goal Keyboard shortcut g This tool lets you set a goal sent on the 34 goal 34 ROS topic
  • RealSense SR300 坑4米 获取相机参数

    硬件 相机的原理我了解的也不甚多 xff0c 看到一篇讲的很好的文章 xff0c 就在这里引用了 SR300设备的红外线发射器 xff08 IR Laser Projector xff09 发射的 结构光 xff0c 经物体反射后会被红外线