目录
一、安装准备
1、安装依赖
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
安装 python,可改命令后缀更改版本
sudo apt-get install python3.10
安装 numpy
pip install numpy
安装 tbb,jpeg,png,tiff
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev
依赖都安装一下,否则编译时会报错
2、下载源码
opencv源码下载
opencv_contrib下载
//链接待补充
我的版本是4.5.1
opencv-4.5.1.zip
opencv_contrib-4.5.1.zip
zhangcaijiang-opencv_3rdparty-contrib_xfeatures2d_boostdesc_20161012.zip
zhangcaijiang-opencv_3rdparty-contrib_xfeatures2d_vgg_20160317.zip
二、编译
1、解压文件
(1) 将所有文件放到同一目录下
(2) 依次解压
sudo unzip opencv-4.5.1.zip
sudo unzip opencv_contrib-4.5.1.zip
sudo unzip zhangcaijiang-opencv_3rdparty-contrib_xfeatures2d_boostdesc_20161012.zip
sudo unzip zhangcaijiang-opencv_3rdparty-contrib_xfeatures2d_vgg_20160317.zip
如图,后两个文件解压后会在同一个文件夹。
解压后的目录
(3) 文件替换和复制
将opencv_3rdparty的文件复制到xfeatures/src/
sudo cp opencv_3rdparty/* ../opencv/opencv_contrib-4.5.1/modules/xfeatures2d/src/
将opencv_contrib-4.5.1复制到opencv-4.5.1
sudo cp -r opencv_contrib-4.5.1 opencv-4.5.1
2、cmake 配置
(1)进入到 opencv-4.5.1 并创建build文件夹
cd opencv-4.5.1/
sudo mkdir build && cd build
(2)创建脚本文件,配置cmake选项
创建并打开文件
sudo gedit cmakeconfig.sh
脚本文件内容
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_ENABLE_NONFREE=ON \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \
-D ENABLE_FAST_MATH=1 \
-D CUDA_FAST_MATH=1 \
-D CUDA_ARCH_BIN=6.2 \
-D WITH_CUBLAS=1 \
-D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.5.1/modules \
-D HAVE_opencv_python3=ON \
-D PYTHON_EXECUTABLE=usr/bin/python3 \
-D BUILD_EXAMPLES=OFF ..
注解:
- CMAKE_INSTALL_PREFIX 是opencv的安装地址 默认安装在 usr/local
- CMAKE_BUILD_TYPE 是opencv安装的版本,Release和Debug两种可选,默认安装Release
- OPENCV_ENABLE_NONFREE 是否使用部分被申请了专利的算方法 这里选True的话就可以使用了
- OPENCV_GENERATE_PKGCONFIG 强烈建议开启这个 设置为ON OPENCV_GENERATE_PKGCONFIG 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。opencv4版本及以上 这里用ON。
- WITH_CUDA和WITH_CUDNN项指的是用CUDA和cuDNN。
- OPENCV_DNN_CUDA项表示我们要编译后的dnn模块支持CUDA。
- ENABLE_FAST_MATH, CUDA_FAST_MATH和WITH_CUBLAS项是为了优化运算而开启的。
- CUDA_ARCH_BIN项的GPU框架版本号很重要。
TX2中CUDA_ARCH_BIN查询方法:见另一篇文章,tx2烧录和安装jetpack包 //待完善
给脚本文件添加权限
sudo chmod +x cmakeconfig.sh
运行脚本文件,进行cmake配置
./cmakeconfig.sh
3、编译和安装
编译和安装
sudo make -j8
sudo make install
编译后的opencv库安装在/ur/local目录下
三、环境配置
1、修改etc/bash.bashrc
sudo gedit /etc/bash.bashrc
文章末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
2、修改动态库
sudo gedit /etc/ld.so.conf.d/opencv.conf
文章中添加
/usr/local/lib
更新
sudo ldconfig
四、测试
1、查看版本号和库
pkg-config --modversion opencv4
pkg-config --libs opencv4
2、测试
进入例程目录
cd /home/nvidia/opencv/opencv-4.5.1/samples/cpp/example_cmake
配置和编译
sudo cmake .
sudo make
运行
sudo ./opencv_example
当连接了摄像头时,能够运行成功。如果没有摄像头,可选择其他例程文件。
五、错误记录
1、CMake Error at modules/core/CMakeLists.txt:40(message):CUDA:OpenCV requires enabled ‘cudev’ module from ‘opencv_contrib’ repository:https://github.com/opencv/opencv_contrib
原因:缺少依赖文件
解决方法:安装依赖(即执行上文中“安装依赖”这一步)
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python3.10
pip install numpy
sudo apt-get install libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev
2、FATAL: In-source builds are not allowed. You should create separate directory for build files
原因:很多模块在编译源码时,需要在源码文件夹中新建build文件夹。
解决办法:执行下面命令
sudo rm CMakeCache.txt
sudo mkdir build && cd build
sudo cmake ..(或者执行上文中“cmake配置”这一步)
sudo make -j8
参考链接:解决报错FATAL: In-source builds are not allowed. You should create separate directory for build files.
3、opencv_contrib编译:fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
解决方法:在/home/nvidia/opencv/opencv-4.5.1/samples/CMakeLists.txt中加入:
INCLUDE_DIRECTORIES("/home/nvidia/opencv/opencv-4.5.1/opencv_contrib-4.5.1/modules/xfeatures2d/include")
参考链接:opencv_contrib编译:fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
4、Ubuntu18.04编译opencv3.4.10报错undefined reference to `cv::cuda::SURF_CUDA::SURF_CUDA()
参考链接:Ubuntu18.04编译opencv3.4.10报错undefined reference to `cv::cuda::SURF_CUDA::SURF_CUDA()及解决方案
以及
undefined reference to 'cv::cuda::SURF_CUDA::SURF_CUDA()解决方法
以上两种方法均未解决
考虑出错位置为example,故将其编译选项关闭,即修改cmake配置
-D BUILD_EXAMPLES=OFF