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数据相关推荐

  1. TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制

    TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...

  2. tensorflow的数据读取 tf.data.DataSet、tf.data.Iterator

    tensorflow的工程有使用python的多进程读取数据,然后给feed给神经网络进行训练. 也有tensorflow中的 tf.data.DataSet的使用.并且由于是tensorflow框架 ...

  3. 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络

    使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络 本文例程部分主要参考官方文档. JAX简介 JAX 的前身是 Autograd ,也就是说 JAX 是 Autograd 升级版本 ...

  4. 深度学习入门笔记(十二):深度学习数据读取

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  5. SJA1000+XC7Z030,SJA1000初始化及PS数据读取

    本人某高校研究生,刚刚研一,接触了一些小项目,想单纯记录一下项目进度以及成果.水平不足,仅供参考,希望能够对大家有所帮助. 板卡介绍:板卡上共4片SJA1000-T芯片,具体芯片功能不进行赘述了,布线 ...

  6. 数据读取机制Dataloader和Dataset和Transforms

    人民币二分类模型 数据-模型-损失函数-优化器-迭代训练 数据收集 img label 数据划分 train valid test 数据读取 Dataloader [sampler-生成索引 data ...

  7. OleDbDataReader数据读取器

    如果只想读取数据(而不更新数据),则不必将它存储在数据集内.相反,可以直接从数据库读出数据并读入应用程序 这时可以使用数据读取器来操作,可以使代码简单化. 如果程序需要通过查询结果执行连续的只读传递, ...

  8. python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)

    我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...

  9. Pytorch Note52 灵活的数据读取介绍

    Pytorch Note52 灵活的数据读取介绍 文章目录 Pytorch Note52 灵活的数据读取介绍 灵活的数据读取 读入数据 传入数据预处理方式 Dataset DataLoader 例子 ...

最新文章

  1. jdbc连接mysql驱动方式_JDBC连接数据库系列教程 – JDBC注册驱动的常见方式
  2. MFC中的消息处理函数
  3. Kali Linux 初上手记录 初始版本1.0.9
  4. 30个图片浏览插件收集
  5. 小菜的 VUE 使用技巧 持续更新
  6. urllib 模块学习
  7. iOS 两种不同的图片无限轮播
  8. python装饰器有几种_Python装饰器使用你可能不知道的几种姿势
  9. android studio for android learning (十七) Toast使用详解
  10. 动态分区分配算法(1、首次适应算法 2、最佳适应算法 3、最坏适应算法 4、邻近适应算法)
  11. Vue html转word
  12. oc宏定义的简单理解
  13. 屏幕录像专家V7.5注册机
  14. 比肩Sci-hub的论文下载神器——Library Genesis
  15. 01背包, 完全背包,多重背包
  16. 校内互测题 by LMY (FSN)
  17. 2225. 找出输掉零场或一场比赛的玩家
  18. java ftp上传文件内容为空
  19. Android 安全防护
  20. 前端js,join()方法

热门文章

  1. 编译原理 最新版 (龙书) 简介and sources
  2. 漫画分销系统服务器配置,漫画分销系统
  3. python实现文字识别软件_文字识别(OCR)CRNN(基于pytorch、python3) 实现不定长中文字符识别...
  4. 搭建ntp时间同步服务器,解决cm时间问题
  5. 10个一般人不知道的小众网站,个个堪称神器,让你大开眼界
  6. 学java被“劝退”的第三天
  7. 【LeetCode系列】LCP 25. 古董键盘(一道动态规划困难题)
  8. 用C++ 输出[1,100]范围内的所有奇数,每行10个。
  9. iOS 应用上架流程(提交到AppStore)
  10. 湖北测绘资质类别范围,如何办理测绘资质?