卸载旧版opencv
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
安装opencv4.5.3
[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
如果遇到libjasper无法安装的话
在 /etc/apt/sources.list的末尾加上
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
保存后在终端执行以下命令即可
sudo apt update
sudo apt install libjasper1 libjasper-dev
另外我们将采用cmake图形化界面进行安装
在终端操作
sudo apt install cmake-qt-gui
然后在opencv官网下载4.5.3版本的opencv
点击【sources】即开始下载 下载后解压
在opencv的github上下载contrib模块 解压即可
在解压后的opencv文件夹内打开终端 输入命令打开cmake图形化界面
cmake-gui
按照下图所示填写最上方的信息
勾选OPENCV_GENERRATE_PKGCONFIG
CMAKE_BUILD_TYPE设置为release
取消勾选WITH_WEBP
OPENCV_EXTRA_MODULES_PATH设置为contrib文件夹下的modules文件夹
有cuda需求的话勾选OPENCV_DNN_CUDA WITH_CUDA
WITH_TBB
有qt下需求的勾选WITH_QT
其他我本人需要 读者可自行选择的选项
WITH_OPENGL(需要同时勾选WITH_GTK WITH_GTK_2_X) OPENCV_ENABLE_NONFREE WITH_OPENNI2
WITH_FAST_MATH
此时直接编译的话会因为连接不到海外服务器而无法编译contrib
需要编辑/etc/hosts
在最末尾添加
199.232.68.133 raw.githubusercontent.com
185.199.108.133 raw.githubusercontent.com
185.199.109.133 raw.githubusercontent.com
185.199.110.133 raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
然后点击configure按钮 选择Unix Makefiles --> Use default native compilers
耐心等待 还报错就多configure几次
如果还是连不上海外服务器的话 可以自行下载 具体步骤:
在报错内容文件~opencv-4.5.3/build/CMakeDownloadLog.txt内查看文件来源
比如我的报错信息是
#do_copy "boostdesc_binboost_064.i" "202e1b3e9fec871b04da31f7f016679f" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26/boostdesc_binboost_064.i" "/home/bear/Soft/opencv-4.5.3/build/downloads/xfeatures2d"
意思就是要在https://raw.githubusercontent.com/opencv/opencv_3rdparty/34e4206aef44d50e6bbcd0ab06354b52e7466d26这个网站下载boostdesc_binboost_064.i这个文件 然后放到/home/bear/Soft/opencv-4.5.3/build/downloads/xfeatures2d这个路径里
而一般cmake下载不了的话在网页也是登不上这个网站的
要在github_opencv_3rdparty上下载
进入网页后点击第三行的[master]后在弹出的搜索栏内输入所需文件的文件名 选择后缀带有年月日期的选项后进入下载即可
直到configure done 也没有红字报错的时候 再点击[generrate]
最后是编译并安装
make -j8
sudo make install
## 配置PKG-CONFIG
```bash
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配置完成
## WITH_OPENGL的小问题
cmake版本大于v3.10的话会要求修改cmakelists.txt
增加如下内容
```bash
if (POLICY CMP0072)
set(OpenGL_GL_PREFERENCE LEGACY)
endif()
注意:如果不把 GLVND改为LEGACY的话 会出现如下报错
1>dynafu.obj : error LNK2019: unresolved external symbol glBindRenderbufferEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@z)
1>dynafu.obj : error LNK2019: unresolved external symbol glGenRenderbuffersEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@z)
1>dynafu.obj : error LNK2019: unresolved external symbol glRenderbufferStorageEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@z)
1>dynafu.obj : error LNK2019: unresolved external symbol glBindFramebufferEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@z)
1>dynafu.obj : error LNK2019: unresolved external symbol glGenFramebuffersEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?$DynaFuImpl@VMat@cv@@@dynafu@cv@@QEAA@AEBUParams@12@@z)
1>dynafu.obj : error LNK2019: unresolved external symbol glFramebufferRenderbufferEXT referenced in function "public: __cdecl cv::dynafu::DynaFuImpl::DynaFuImpl(struct cv::dynafu::Params const &)" (??0?
另外 有可能会出现如下报错
/home/bear/Soft/opencv-4.5.3/modules/ts/include/opencv2/ts.hpp:816:1: fatal error: opening dependency file CMakeFiles/opencv_test_barcode.dir/test/test_main.cpp.o.d: Permission denied
如报错所示 Permission denied意思是文件因权限不足而被拒绝访问 解决方法是在opencv文件夹下打开终端 输入
sudo chmod -R 777 *
将文件夹下所有文件的权限都设置为可访问 即可
cmake版本小问题
CMake Deprecation Warning at 3rdparty/carotene/CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument value or use a … suffix to tell
CMake that the project does not need compatibility with older versions.
出现了这个问题的话就修改3rdparty/carotene/CMakeLists.txt把第一行的版本要求前面加上#注释掉即可
如果是别的cmakelists出现报错也按这种思路解决