本文参考
Using Orbbec Astra 3D camerasC++20学习:基于Ubuntu系统编译gcc10.2.0linux下编译安装opencv生成opencv.pc

摄像头方案 / 型号介绍

最近项目需要开发立体视觉,逛了一圈决定采用结构光摄像头方案,该技术比较成熟,开发难度相对TOF方案较小

具体摄像头型号为 乐视三合一体感摄像头LeTMC-520 基本就是奥比中光 Orbbec Astra Pro 的换皮版 就连插在电脑上显示的设备名称都是 Astra Pro

2020年底 奥比中光宣布了与Opencv的合作 OpenCV增加对Astra系列3D深度相机的支持后 就可以使用cv::VideoCapture直接获取深度传感器信息 与使用其获取彩色相机视频流的过程一致 极大的方便了开发

随着乐视的倒闭 商家手里囤积的乐视摄像头在淘宝和闲鱼低价抛售 无疑成为当下性价比最高的开发用结构光摄像头

以下列出两者的对比

型号

Astra Pro

乐视三合一

外观

黑色外壳

银色铝合金 手感很好

工作范围

0.6m~8m

0.6m~4m

可视角度

H66.1’ V40.2’

H60’ V46.7’

彩色图分辨率

1280x720

640x480

320x240

1280x720

640x480

深度图分辨率

1280x1024

640x480

320x240

160x120

640x480

320x240

160x120

接口

自带usb线

需要外接usb公对母线

我的方案是使用usb拓展坞

安装OpenNi

奥比中光官网下载openni安装包

opencv能打开的摄像头种类 opencv摄像头推荐_linux


解压后进入目录~/OpenNI_2.3.0.66/Linux/OpenNI-Linux-x64-2.3.0.66

需要注意的是所进入的目录要根据电脑cpu架构(x86

x64 arm)决定 我的电脑是64位处理器 所以进入的目录是 /OpenNI-Linux-x64-2.3.0.66

在终端中执行

$ chmod +x install.sh 
$ sudo ./install.sh

完成后重新插拔摄像头以使udev规则生效
然后运行如下命令更改环境变量

$ source OpenNIDevEnvironment

验证环境变量是否生效 终端与下列情况一致则代表安装成功

$ echo $OPENNI2_INCLUDE
/home/user/OpenNI_2.3.0.63/Linux/OpenNI-Linux-x64-2.3.0.63/Include
$ echo $OPENNI2_REDIST
/home/user/OpenNI_2.3.0.63/Linux/OpenNI-Linux-x64-2.3.0.63/Redist

下载并安装g++ (GCC) 10.2.0(非必须)

opencv官方推荐使用cmake编译

在安装cmake之前要确保linux系统上已经下载了gcc和g++ 否则会报错
嫌麻烦不想安装最新版的话可以直接输入以下命令

sudo apt-get gcc g++

若要下载最新版10.2.0 则要先下载软件安装包
下载gcc 解压后打开终端运行命令 会在线下载依赖包

cd gcc-10.2.0
./contrib/download_prerequisites

opencv能打开的摄像头种类 opencv摄像头推荐_cmake_02


然后安装build-essential软件包

sudo apt-get install build-essential

再然后返回上级目录->建立build文件夹->进入文件夹->生成makefile->开始编译
我只编译c和c++两种语言 另外j后面的数字是cpu同时运行的线程数 具体视cpu参数为准 线程越多速度越快
具体命令为

cd ..
mkdir gcc-build-10.2.0 && cd gcc-build-10.2.0
../gcc-10.2.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
make -j8

经过漫长的等待 make完成后安装

sudo make install

结束后查看版本 如图显示则表明安装成功

g++ --version

opencv能打开的摄像头种类 opencv摄像头推荐_opencv能打开的摄像头种类_03

下载并安装Cmake

在此之前要先下载OpenSSL development package和qtbase5-dev

sudo apt-get install libssl-dev qtbase5-dev

官网下载cmake-x.xx.x.tar.gz后解压

opencv能打开的摄像头种类 opencv摄像头推荐_opencv能打开的摄像头种类_04


在解压后的文件夹中打开终端输入

$ ./bootstrap --qt-gui
$ make -j8
$ sudo make install

至此cmake安装完成 可以通过如下命令查看版本

cmake -version

配置OpenCv

安装opencv之前需要根据以下命令预装依赖库

[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

然后在opencv官网下载4.5.1以上版本的opencv

点击【sources】即开始下载

opencv能打开的摄像头种类 opencv摄像头推荐_linux_05


下载完后解压 cd到opencv目录内 可选BUILD_EXAMPLES项以得到astra摄像头的例程

$ mkdir build
$ cd build
$ cmake -DWITH_OPENNI2=ON -DBUILD_EXAMPLES=ON -DOPENCV_GENERATE_PKGCONFIG=ON ..

终端如图所示则表示openni库被顺利找到(openni一栏显示yes,末尾显示configuring done和Generating done)

opencv能打开的摄像头种类 opencv摄像头推荐_opencv_06


opencv能打开的摄像头种类 opencv摄像头推荐_opencv能打开的摄像头种类_07


值得一提的是 在配置openni的最后一步:

$ source OpenNIDevEnvironment

之后 如果退出当前终端的话 source的作用就会消失 所以我的做法是source后在当前终端cd到opencv的文件夹中 再进行mkdir build等一系列操作

opencv能打开的摄像头种类 opencv摄像头推荐_linux_08


最后是编译并安装

make -j8
sudo make install

如图所示 至此openni与opencv环境搭建成功

opencv能打开的摄像头种类 opencv摄像头推荐_cmake_09

配置PKG-CONFIG

sudo vim /etc/ld.so.conf.d/opencv.conf

按i即可以开始编辑文本 在文件末尾添加:/usr/local/lib

如果这是我们第一次安装opencv,这个文件可能是个空文件,这里的/usr/local/lib就是我们安装opencv时安装的那些库的目录

然后保存编辑并退出回终端 方法为输入冒号:,再输入wq

退回终端后 输入

sudo ldconfig
sudo vim /etc/bash.bashrc

然后在文本末尾处添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
 
export PKG_CONFIG_PATH

然后同样:wq,再在终端输入以下命令以更新系统的环境变量

source /etc/bash.bashrc

至此pkg-config配置完成

在Qt Creator打开Astra与opencv的例程

以管理员身份打开Qt Creator
步骤是打开qt的安装目录 在此路径下打开终端
/QT/Tools/QtCreator/bin

终端中输入

sudo ./qtcreator

新建工程在此不赘述
pro文件中要加入以下

INCLUDEPATH +=  /usr/local/include \
                /usr/local/include/opencv4 \
                /usr/local/include/opencv4/opencv2

LIBS += /usr/local/lib/lib*
LIBS +=-lpthread

源文件的话opencv官方有例程 在opecv的安装目录内
~/opencv-4.5.1/samples/cpp/tutorial_code/videoio/
orbbec_astr
值得注意的是,在打开彩色摄像头的命令这里 需要做一下小更改,加入体感摄像头的彩色摄像头对应的索引号 我的电脑上是2 具体是哪个网上有挺多查找的办法的 像我的话比较懒 就直接从0开始一个一个试

VideoCapture colorStream(2,CAP_V4L2);

运行就可以见证奇迹
记得深度图的有效范围在0.4米以外

opencv能打开的摄像头种类 opencv摄像头推荐_linux_10