大概一个月前参加了Orbbec 的比赛,后面方案也通过了,收到了Jetson Nano和Gemini的相机。最近将学习和开发提上日程。
一般来说我们需要一些前期的准备才可以:
C++,Cmake,Python
相机参数(内外参数)
关于视频流结构的数据结构表达
这个Gemini的相机,官方提供的SDK可以使用两个,看下图。
Orbbec不可以使用
https://developer.orbbec.com.cn/download.html?id=56
https://developer.orbbec.com.cn/download.html?id=65
对Gemini来说,就是这个SDK不可以使用
这里插一下官方的一个相机流捕获的软件,下面是Gemini相机的若干输出图。有RGB,IR,点云,深度图,一共有4种类型的图。
深度图,在右上角的地方可以打开FPS的显示功能
这个RGB的视频流就是很暗,可能是我的光不够好
红外线的图
点云的图,这个我觉得不是直接输出的图,而是处理过的深度图
在这个预览的exe应用里面,可以看到有一个文档(还有中文的)
这个应用就是使用OpenNi2 开发的应用
Orbbec Astra Stereo S U3 AY2F612029J
IR fx = 475.762
IR fy = 475.762
IR cx = 318.853
IR cy = 199.18
RGB fx = 452.609
RGB fy = 452.609
RGB cx = 326.706
RGB cy = 242.617
r00 = 0.999983
r01 = 0.000965277
r02 = -0.00574583
r10 = -0.000964711
r11 = 1
r12 = 0.000101199
r20 = 0.00574592
r21 = -9.56543e-05
r22 = 0.999983
t1 = -9.98297
t2 = -0.0677092
t3 = -0.662485
k1 = 0
k2 = 0
p1 = 0
p2 = 0
k3 = 0
使用应用的时候,可以导出摄像头的内外参数。
我这里就看AstraSDK
emmmmm,还发现有这句话
一些官网出现的API,看起来真的是比较明了的
看这个写法就是面向对象的写法
可以看到C是我们SDK的核心实现
大概位置在这里吗?全是头文件的接口,一点的实现也没有
我们打开samples文件夹,点击sln的文件
我使用2019
需要在单个的页面里面做一些路径的设置
这里我没有看懂,下篇设置
和R200的一样,也是一堆项目全部解析了
顶层的话看项目的属性
会发现是这样的配置,我们不要这个
我们要单个文件的设置
具体的还是看下篇文章。
SDK内部有已经编译好的exe文件
可以直接使用
晚上的话,深度摄像头也是可以使用的
这项目里面的源码在这里,Cmake+C源文件。
我还得学几天Cmake~~~
这个是我上面展示的数据流
一开始是初始化的代码
下面一个死循环读取数据帧
我这里写的很粗,我明天得文章写流程和API解读。
使用 OpenNI 时,点云的生成也有两种方法:
方法 1:分别读取相机的内参和深度帧,对深度帧的每一个像素点,根据内参来完成点云的
生成。
方法 2:使用 CoordinateConverter 类中的 convertDepthToWorld 方法来将深度坐标转换为点
云。
方法 1 是最常使用的方法,所以一般情况下我们使用这种方法,方法 2 是一种不准确的方
法,该方法使用 FOV(Field of View, 视场角)来估计内参中的焦距,使用图像分辨率的一半来估
计主点的坐标。因此该方法一般在无法读取到相机内参的情况下使用达到模拟生成点云的目的。