前置知识:
1.妙算2-G上已经预装好了cuda9,所以我没考虑cuda的安装问题,也没有考虑cuda是否和opencv存在版本的对应问题。
2.根据:python+OpenCV+cuda计算光流_dagongji10的博客-CSDN博客
OpenCV3.x/OpenCV2.x的GPU版本仅支持C++编程加速
OpenCV4.1.0之后的GPU版本开始支持Python编程加速
3.直接下载opencv-python包是已经预编译好的CPU版本的opencv,由于预编译的原因,下载时需要注意python版本和opencv-python包的对应关系,若版本不对应则会出现无法调用opencv包的情况。而自己通过cmake编译的话就不需要版本对应了,因为在生成配置文件时会根据系统的版本进行配置。
4.折腾了很久是因为妙算2中原本存在有多个版本的OpenCV(ros自带的opencv、jetpack中自带的OpenCV),导致环境配置的时候一通乱麻一样。最后是把OpenCV全部删除然后思路才慢慢清晰的。
配了这么多环境,感觉最重要的还是把思路捋清楚,有一条主线的话,找问题、搜资料会通透许多,这也是我写前置知识的原因。
一、主体参考:
博客参考:
Nvidia Jetson TX2 配置Cuda 加速的Opencv_tx2安装cuda_YOLOKY的博客-CSDN博客
(是的,我使用了上面博客中的apt-get auto-remove命令,不建议使用)
官方参考:OpenCV: Building OpenCV for Tegra with CUDA
二、解决编译过程中报错参考:
——error1:
/usr/bin/ld: skipping incompatible /usr/local/cuda-9.0/lib64/libcudnn.so when searching for -lcudnn
——由于我不需要用到cudnn,所以直接在cmake命令选项中关掉cudnn的编译:
-D WITH_CUDNN=OFF
——error2:
No such file or dirctory
——ubuntu安装opencv_contrib扩展库,附踩坑+测试-云社区-华为云
——error3:
undefined reference to cv::cuda::SURF_CUDA::SURF_CUDA()
——没找到很好的解决方法,直接在cmake命令选项中关掉EXAMPLES的编译:
-DBUILD_EXAMPLES=OFF
三、最终的cmake命令为:
cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DBUILD_PNG=OFF \
-DBUILD_TIFF=OFF \
-DBUILD_TBB=OFF \
-DBUILD_JPEG=OFF \
-DBUILD_JASPER=OFF \
-DBUILD_ZLIB=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_java=OFF \
-DBUILD_opencv_python2=ON \ #即可以用python2
-DBUILD_opencv_python3=ON \ #也可以用python3调用
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENMP=OFF \
-DWITH_FFMPEG=ON \
-DWITH_GSTREAMER=OFF \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_CUDA=ON \ #启动GPU版本
-DWITH_GTK=ON \
-DWITH_VTK=OFF \
-DWITH_TBB=ON \
-DWITH_1394=OFF \
-DWITH_OPENEXR=OFF \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 \
-DCUDA_ARCH_BIN=6.2 \ #对应的硬件算力
-DCUDA_ARCH_PTX="" \
-D WITH_CUDNN=OFF \
-DOPENCV_EXTRA_MODULES_PATH=/home/dji/opencv-4.1.1/opencv_contrib-4.1.1/modules \
..
关于使用pkg-config功能:
查看opencv4.x要输入 pkg-config opencv4 --modversion来查找。因为/usr/local/lib/pkgconfig/里的文件是opencv4.pc
但是注意:
csdn博客:OPENCV_GENERATE_PKGCONFIG 强烈建议开启这个 设置为ON, 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。opencv4版本及以上 这里用ON。
而我cmake编译命令中应该是没有编译生成.pc文件,所以不支持pkg-config功能。