zed立体相机+pyhon+opencv
zed相机网上资料都是关于安装的教程,后续的一些使用介绍的不是很多,
因为官方文档已经介绍的很详细,这里介绍一下自己的学习过程,以备查阅,如有错误,敬请指正。
这时官方文档,所有的信息都是根据这儿得来的。
https://www.stereolabs.com/
安装
因为zed相机属于UVC(USB video device class )设备,索引可以用作双目摄像头直接用于计算机或者嵌入式平台,和普通的双目摄像头应该没什么区别。
但是如果要使用其SDK,就需要cuda环境。一开始不知道,打算用在台式机(Intel HD Graphics 4600集成显卡)上,后来发现需要NVIDIA。只好转用我的T470(总算能干点活了)。按照这个教程下来,基本没问题。
https://blog.csdn.net/weixin_42132223/article/details/81840520
使用
安装后在程序里面搜索zed,会发现多出几个应用。可以都打开看看(别忘了把zed相机插上)。其中zed viewer就是拍摄的图像,左下角可以看到可以录视频照相。但录的视频是SVO格式的。里面包含了很多信息。包括深度,点云什么的,所以会非常大。depth viewer可以看深度图像和点云。ZED calibratiuon是做标定的很方便,不用自己搞棋盘,直接拿摄像头去怼显示前上的该应用给的棋盘就行,这里建议用大一点的显示器。先看一下教程不是很难。还有一个ZEDFu我没用到。
以上的这些应用只能让我们看到ZED的一些功能。用来做开发,自然少不了SDK.花一个小时把这个文档大概看一些。基本上就可以上手开发了。
https://www.stereolabs.com/docs/getting-started/
方便参考的一些点
zed相机比较方便的一个点是,做实时分析的时候不用随时都要插着摄像头,可以先录制好获得svo文件,然后用grab()函数直接得到的就是矫正后的图像,当然也可以参考给的opnecv例程进行图像,视频还有点云文件的保存。
因为我要识别网球。很小,距离也很远。一开始打算用点云去做,滤波后提取满足条件的聚类。但PCL库没接触过。后来看到这篇文章
https://support.stereolabs.com/hc/en-us/articles/360011977594-Can-I-get-the-3D-position-of-a-Custom-Object-a-Ball-or-a-Small-Object-
我在深度图中也看不到飞行的网球,zed开发人员也不建议直接用从深度图中去找。深度图是立体矫正匹配后得到的。于是我直接从矫正后的图像中去找两个球的对应点,得到视差。最后计算出三维坐标值。
zed录像保存为svo文件的问题
因为我需要的帧率比较高,而且在关键时刻需要稳定,但是得到的svo文件打开时(需要SDK),发现帧率一直在变化,而且某些帧率变得很低,不太清楚为什么。一下是我录制是的代码。
1 |
|
这里要实名表扬zed的技术支持。发送了询问邮件很快就得到了恢复。最终找到了问题所在。
因为我在thinkpad T470P上使用的该摄像头。技术支持说可能是因为GeForce 940MX不支持在最大帧率下工作。后来我进行了一些实验。发现在720P下,设置为15帧和30帧基本上不会有掉帧。但在60帧时就比较严重。所以我猜想可能是因为这个问题。另外,在720p时,即使调用SDK也不能设置任意帧数,好像只有,15,30,60三个选项。