tof 相机的数据读取,depth data和amplitude data以及3D数据
1.开发前提
如果相机带有SDK 也就是开发需要的工具以及包,就要用相机带的开发包,里面包含了相应的读取文件的函数,以及设置的相机的相关函数。
本文使用的是TTF相机,C++头文件代码如下:
#include "../../include/TTF_API.h"
#include <unistd.h>using namespace std;
using namespace Voxel;class Depth_Camera
{public: Depth_Camera();~Depth_Camera();TTF_API::_ttfDeviceInfo m_pDevInfo[MAX_DEVICE];DepthFrame *m_pDepthFrame;XYZIPointCloudFrame *m_pPCLFrame;int ReadDepthFrame(const DepthFrame* pDepthFrame);int ReadPointCloudFrame(const XYZIPointCloudFrame* pXYZIPointCloudFrame);bool System_init();int Buffer_init();void Data_Depth();void Data_PCL();void Device_Close();void Device_Stop();};
其中TTF::相关函数是相机自带的接口。
2.读取数据:
函数的实现部分,c++代码如下:
#include "Depth_Camera.h"Depth_Camera::Depth_Camera()
{}Depth_Camera::~Depth_Camera()
{}//读取相关内容
int Depth_Camera::ReadDepthFrame(const DepthFrame* pDepthFrame)
{const DepthFrame *d = pDepthFrame;const float* data;data = d->depth.data();cout<< "depth:"<< d->id << "@" << d->timestamp << " data:" << data[320*120+160] << endl;return TTF_API::ERROR_NO;
}int Depth_Camera::ReadPointCloudFrame(const XYZIPointCloudFrame* pXYZIPointCloudFrame)
{const XYZIPointCloudFrame *d = pXYZIPointCloudFrame;cout<< "pcl:" << d->id << "@" << d->timestamp << " data:" << d->points[320*120+160].z << endl;return TTF_API::ERROR_NO;
}
//函数初始化
bool Depth_Camera::System_init()
{int nDevCount;//device countint nDevOpened;TTF_API::ttfGetDeviceList(m_pDevInfo, nDevCount);if (nDevCount < 1){std::cerr << "No Camera Found!, Please connection check and restart." "Connection Error" << std::endl;}else{nDevOpened = TTF_API::ttfDeviceOpen(m_pDevInfo[0].hnd);if (nDevOpened > 0){//Callback Register //回调函数, TTF_API::ttfRegister_Callback_DepthFrame(std::bind(&Depth_Camera::ReadDepthFrame, this, std::placeholders::_1));TTF_API::ttfRegister_Callback_PointCloudFrame(std::bind(&Depth_Camera::ReadPointCloudFrame, this, std::placeholders::_1));std::cout << "Camera[VID:" << m_pDevInfo[0].nVendorId << ", PID:" << m_pDevInfo[0].nProductId <<", SerialNum:" << m_pDevInfo[0].szSerialNum << "] Open Success" << endl;}else{return TTF_API::ERROR_OPEN;} Buffer_init();}Data_Depth();//start Depth//imshow("Binary", pDepthFrame);return TTF_API::ERROR_NO;
}int Depth_Camera::Buffer_init()
{m_pDepthFrame = (DepthFrame*)malloc(sizeof(DepthFrame));;m_pPCLFrame = (XYZIPointCloudFrame*)malloc(sizeof(XYZIPointCloudFrame));if(m_pDepthFrame == NULL || m_pPCLFrame == NULL){cout << "Failed to create nescecary buffers to display the image" << endl;return TTF_API::ERROR_FAIL;}elsereturn TTF_API::ERROR_NO;
}void Depth_Camera::Data_Depth()
{TTF_API::ttfClearCallback(m_pDevInfo[0].hnd, TTF_API::FrameType::FRAME_XYZI_POINT_CLOUD_FRAME);TTF_API::ttfDeviceStart(m_pDevInfo[0].hnd, TTF_API::FrameType::FRAME_DEPTH_FRAME);
}void Depth_Camera::Data_PCL()
{TTF_API::ttfClearCallback(m_pDevInfo[0].hnd, TTF_API::FrameType::FRAME_DEPTH_FRAME);TTF_API::ttfDeviceStart(m_pDevInfo[0].hnd, TTF_API::FrameType::FRAME_XYZI_POINT_CLOUD_FRAME);
}void Depth_Camera::Device_Close()
{TTF_API::ttfDeviceStop(m_pDevInfo[0].hnd);TTF_API::ttfDeviceClose(m_pDevInfo[0].hnd);
}void Depth_Camera::Device_Stop()
{TTF_API::ttfDeviceStop(m_pDevInfo[0].hnd);
}
3.主函数的实现:
主函数未使用线程,只是比较简单的数据的读取 代码如下,
#include "Depth_Camera.h"int main()
{ Depth_Camera *depth_camera = new Depth_Camera;int nRet;nRet = depth_camera->System_init();if(nRet < 1){cout << "init Error :" << nRet << endl;exit(0);}char getkey;while(1){getkey = getchar();//Reading end Processif(getkey == 'q'){depth_camera->Device_Close();break;} else if(getkey == '2')//Depth{depth_camera->Data_Depth();}else if(getkey == '3')//PCL{depth_camera->Data_PCL();}else if(getkey == 's'){depth_camera->Device_Stop();}}if(depth_camera != NULL){delete depth_camera;depth_camera = NULL;}return 0;
}
4.今天只写数据的简单读取,下次完成深度数据以及3D数据的显示。
tof 相机的数据读取,depth data和amplitude data以及3D数据相关推荐
- TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...
- tensorflow的数据读取 tf.data.DataSet、tf.data.Iterator
tensorflow的工程有使用python的多进程读取数据,然后给feed给神经网络进行训练. 也有tensorflow中的 tf.data.DataSet的使用.并且由于是tensorflow框架 ...
- 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络
使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档. JAX简介 JAX 的前身是 Autograd ,也就是说 JAX 是 Autograd 升级版本 ...
- 深度学习入门笔记(十二):深度学习数据读取
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- SJA1000+XC7Z030,SJA1000初始化及PS数据读取
本人某高校研究生,刚刚研一,接触了一些小项目,想单纯记录一下项目进度以及成果.水平不足,仅供参考,希望能够对大家有所帮助. 板卡介绍:板卡上共4片SJA1000-T芯片,具体芯片功能不进行赘述了,布线 ...
- 数据读取机制Dataloader和Dataset和Transforms
人民币二分类模型 数据-模型-损失函数-优化器-迭代训练 数据收集 img label 数据划分 train valid test 数据读取 Dataloader [sampler-生成索引 data ...
- OleDbDataReader数据读取器
如果只想读取数据(而不更新数据),则不必将它存储在数据集内.相反,可以直接从数据库读出数据并读入应用程序 这时可以使用数据读取器来操作,可以使代码简单化. 如果程序需要通过查询结果执行连续的只读传递, ...
- python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)
我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...
- Pytorch Note52 灵活的数据读取介绍
Pytorch Note52 灵活的数据读取介绍 文章目录 Pytorch Note52 灵活的数据读取介绍 灵活的数据读取 读入数据 传入数据预处理方式 Dataset DataLoader 例子 ...
最新文章
- jdbc连接mysql驱动方式_JDBC连接数据库系列教程 – JDBC注册驱动的常见方式
- MFC中的消息处理函数
- Kali Linux 初上手记录 初始版本1.0.9
- 30个图片浏览插件收集
- 小菜的 VUE 使用技巧 持续更新
- urllib 模块学习
- iOS 两种不同的图片无限轮播
- python装饰器有几种_Python装饰器使用你可能不知道的几种姿势
- android studio for android learning (十七) Toast使用详解
- 动态分区分配算法(1、首次适应算法 2、最佳适应算法 3、最坏适应算法 4、邻近适应算法)
- Vue html转word
- oc宏定义的简单理解
- 屏幕录像专家V7.5注册机
- 比肩Sci-hub的论文下载神器——Library Genesis
- 01背包, 完全背包,多重背包
- 校内互测题 by LMY (FSN)
- 2225. 找出输掉零场或一场比赛的玩家
- java ftp上传文件内容为空
- Android 安全防护
- 前端js,join()方法
热门文章
- 编译原理 最新版 (龙书) 简介and sources
- 漫画分销系统服务器配置,漫画分销系统
- python实现文字识别软件_文字识别(OCR)CRNN(基于pytorch、python3) 实现不定长中文字符识别...
- 搭建ntp时间同步服务器,解决cm时间问题
- 10个一般人不知道的小众网站,个个堪称神器,让你大开眼界
- 学java被“劝退”的第三天
- 【LeetCode系列】LCP 25. 古董键盘(一道动态规划困难题)
- 用C++ 输出[1,100]范围内的所有奇数,每行10个。
- iOS 应用上架流程(提交到AppStore)
- 湖北测绘资质类别范围,如何办理测绘资质?