版本选择
之前选择了OpenCV4.5.3的版本,
由于系统安装的某些依赖库版本迭代,4.5.3版本的opencv中调用的某些函数已经过时(编译时报错函数行参数量对不上等情况),
不得已提升opencv的版本。
依赖安装
这里可以一键安装的依赖有
sudo apt-get install build-essential cmake git unzip pkg-config libjpeg-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libgtk2.0-dev libcanberra-gtk* libgtk-3-dev libgstreamer1.0-dev gstreamer1.0-gtk3 \
libgstreamer-plugins-base1.0-dev gstreamer1.0-gl libxvidcore-dev libx264-dev python3-dev python3-numpy python3-pip libtbb2 libtbb-dev libdc1394-22-dev libv4l-dev v4l-utils \
gfortran libhdf5-dev libprotobuf-dev libgoogle-glog-dev libgflags-dev protobuf-compiler -y
openblas编译安装
由于我使用的系统为debian11,
经过查验资料(Help to properly package Ubuntu libopenblas),与实际测试发现,opencv不能正确识别到openBlas矩阵加速库的原因为
debian的包管理系统安装的libopenblias-dev
,只包含了cblas.h
,没有包含lapacke.h
lapacke.h文件必须安装liblapacke-dev
,也就是说debian包管理把这两个原本在一起的给分开了
而经查看opencv cmake代码OpenCVFindLAPACK.cmake
与OpenCVFindOpenBLAS.cmake
发现
opencv启动LAPACK(OpenBlas)
模式,必须满足cblas.h
与lapacke.h
在同一个文件夹下,
如果不在同一个文件夹下,退化为LAPACK/Generic
模式
那就有小伙伴要问了,安装好liblapacke-dev
与libopenblias-dev
后在同一个文件夹下创建软连接不就好了。
其实是有道理的,
但是为了避免潜在的问题,例如如果版本不一样怎么半?,出现了可以编译通过,但是运行的时候嗝屁了,到时候你忘了这茬子事儿,有你好果子吃的。
正常来说cblas.h
与lapacke.h
都是openBlas编译生成的
其编译出来的文件中同时生成这两个文件。
这里还要辨别一下一个事情
openBlas原本的语言是Fortran
所以最后会生成f77blas.h与cblas.h
分别对应于fortran接口与c接口
同时lapacke与lapack也是不同的
liblapack-dev 与 liblapacke-dev安装的也是不同的
前者对应fortran 后者对应c
其头文件对应lapack.h与lapack.h
orbbec相机sdk配置
由于从师兄那里继承的一个年份比较久远的orbbec astra pro相机,
这个相机属于红外结构光类型的,最远深度范围有8m,性能比较抗打,
但是年份久远有十年之久了,很多SDK都已经不再兼容,
而且不知为何中文官网上下载不了相机的sdk,
很多年份久远的sdk必须在orbbec英文官网上下载
这里下载的是openNi2版本的SDK
在rk3588 debian11系统上运行sdk中的sample文件发现,
usb协议开始初始化通讯时出现timeout,
后来怀疑是astra pro过于久远,已经不再支持。
后来在英文官方论坛中,有大佬备份了老版本的openni sdk,
经过验证,该版本sdk可以运行
同时opencv在4.x版本中已经支持对orbbec astra pro相机调用,相关连接为Using Orbbec Astra 3D cameras
opencv官方也在tutorials中指出官网版本的sdk不适用于astra pro相机
具体配置流程有
下载论坛中的sdk
运行sdk中的install.sh
转到编译opencv中 带有-DWITH__OPENNI2=ON
rock5a 最优opencv编译选项
camke -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local\
-D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_IPP=OFF -D WITH_OPENMP=ON \
-D WITH_EIGEN=ON -D WITH_LAPACK=ON -D WITH_OPENCL=OFF -D WITH_GSTREAMER=ON\
-D WITH_GTK=ON -D WITH_V4L=ON -D WITH_LIBV4L=ON -D WITH_QT=OFF -D WITH_OPENNI2=ON\
-D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF\
-D BUILD_EXAMPLES=OFF -D ENABLE_NEON=ON -D OPENCV_ENABLE_NONFREE=ON ..
CMAKE_INSTALL_PREFIX=/usr/local | 安装到标准目录
OPENCV_GENERATE_PKGCONFIG=ON | 安装时生成 .pc 文件,方便开发链接
WITH_TBB=ON | 启用 Intel TBB 多线程加速
WITH_IPP=OFF | Intel专有加速,Rock5A用不到
WITH_OPENMP=ON | 开启OpenMP并行加速
WITH_EIGEN=ON | 启用Eigen矩阵加速
WITH_LAPACK=ON | 启用LAPACK高级矩阵加速
WITH_OPENCL=OFF | 关掉OpenCL Rock5A一般不用OpenCL
WITH_GSTREAMER=ON | 支持摄像头、视频流、RTSP
WITH_GTK=ON | 用GTK做GUI窗口(imshow)
WITH_V4L=ON | 支持USB摄像头
WITH_LIBV4L=ON | 支持libv4l摄像头接口
WITH_QT=OFF | 不用Qt窗口
WITH_OPENNI2=OFF | OpenNI 2 深度相机使用
BUILD_opencv_python3=ON | 编译Python3绑定
BUILD_opencv_python2=OFF | 关掉Python2支持 (过时了)
BUILD_TESTS=OFF | 不编译测试程序
BUILD_PERF_TESTS=OFF | 不编译性能测试
BUILD_EXAMPLES=OFF | 不编译示例程序
ENABLE_NEON=ON | 启用ARM NEON指令加速
OPENCV_ENABLE_NONFREE=ON | 允许使用非自由算法(比如SIFT)
运行结果
可以通过命令行输出深度值,但是不能展示图像,怀疑是gtk没有安装好?还是说调用方式错误?
fixed imshow要和waitkey一起调用
通过opencv调用的相机深度值占用cpu比sdk占用要高多了,在怀疑中~~