推荐Linux其他软件安装:
Ubuntu/Debian小白从零开始配置深度学习环境和各种软件库(显卡驱动、CUDA、CUDNN、Pytorch、OpenCv、PCL、Cmake …)【持续维护】
一、apt 软件包安装(opencv4.2.0推荐)
使用apt安装方式,比较简单,但是版本不是最新的,一般Ubuntu20.04对应Opencv4.2.0,Ubuntu22.04对应Opencv4.6.0。
具体查看下系统软件包里面opencv的版本
apt search libopencv-dev
- 1
sudo apt-get update
# 安装依赖
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
# 直接一键安装
sudo apt-get install libopencv-dev
- 1
- 2
- 3
- 4
- 5
如果没有版本要求限制,此种安装方法比较快捷方便。
二、源码安装(opencv4.10.0高版本)
2.0 安装依赖环境
如果安装过程中,缺少什么安装什么
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
- 1
- 2
2.1 编译安装
Opencv官方源码下载地址:opencv源码 和 opencv_contrib扩展 一般源码安装次一点的最新版。
#git clone https://github.com/opencv/opencv.git
#cd opencv
#git checkout # 替换为你想要安装的OpenCV版本号,例如:4.10.0
cd opencv-4.10.0/
mkdir build && cd build
- 1
- 2
- 3
- 4
- 5
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TIFF=ON -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.10.0/modules ..
- 1
#cmake结束后,编译安装 编译安装时候确定没有其他进程打开
#或者 终端输入nproc命令查看电脑线程数。假如有8个,使用6个编译
sudo make -j6
#安装
sudo make install
- 1
- 2
- 3
- 4
- 5
cmake里面的参数,重点关注这几个就OK
参数 | 含义 |
---|---|
-D CMAKE_INSTALL_PREFIX=/usr/local | 指定安装目录为/usr/local |
-D OPENCV_GENERATE_PKGCONFIG=ON | 生成.pc文件,使其他程序可以使用OpenCV库 |
-D OPENCV_EXTRA_MODULES_PATH=…/…/opencv_contrib-4.10.0/modules/ | 指定OpenCV额外模块的路径 |
-D BUILD_EXAMPLES=OFF | 禁用编译OpenCV示例程序 |
2.2 报错解决
一般在sudo make 时会出现各种错误;结合网上教程和自己错误现在总结下。
问题一:与anaconda3的动态链接库指向版本冲突
现象:/usr/bin/ld: /lib/x86_64-linux-gnu/libwayland-client.so.0: undefined reference to `ffi_type_uint32@LIBFFI_BASE_7.0’,以后遇见 xxx.so: undefined reference to xxx 基本上都是系统与软件链接器冲突,把链接器指向改过来就行。
与问题一样: anaconda3/lib/libQt5X11Extras.so.5: undefined reference to `qt_version_tag@Qt_5.15’ anaconda 与系统默认的冲突
原因: 既然是qt_version_tag的问题,说明是qmake的版本不兼容导致,即当前QT使用的qmake和系统实际指定的qmake版本不一致。查看系统默认的qmake版本,一般来说是系统与anaconda中的lib版本冲突。其实问题本质是anaconda3与系统默认路径库文件版本冲突原因
qmake -version
dpkg -l | grep qt5
- 1
- 2
解决方法一: 退出当前环境
conda deactivate
- 1
解决方法二: 在使用编译的CMakeLists.txt文件里面添加一句话,让其指定搜索路径【推荐】
SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
- 1
添加这句话,其他的库文件也会在系统目录里面寻找;记得删除build里面所有建的环境,再次编译通过。
sudo make clean
- 1
解决方法三: 把有关anaconda3的配置环境注释掉
gedit ~/.bashrc
# 注释以下内容
# __conda_setup="$('/home/xjc/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
# if [ $? -eq 0 ]; then
# eval "$__conda_setup"
# else
# if [ -f "/home/xjc/anaconda3/etc/profile.d/conda.sh" ]; then
# . "/home/xjc/anaconda3/etc/profile.d/conda.sh"
# else
# export PATH="/home/xjc/anaconda3/bin:$PATH"
# fi
# fi
# unset __conda_setup
source ~/.bashrc
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
安装完后,再把注释改回来
解决方法四: 在CMakeLists.txt设置单独版本查找路径
find_package(Qt5 5.15 REQUIRED)
- 1
解决方法五: 重新把库文件链接到指定需要的文件
sudo apt-get install locate
# 使用命令ldd定位libwayland-client.so.0当中,所依赖的ffi库
$ ldd /lib/x86_64-linux-gnu/libwayland-client.so.0 | grep ffi
- 1
- 2
- 3
查看下anaconda3/lib/和 /usr/lib/x86_64-linux-gnu/ 对应得库版本是否一致 ,如果不一样则修改
locate libffi.so.7
# 查看系统的libffi
ll /lib/x86_64-linux-gnu/ | grep ffi
# 查看Anaconda的libffi
ll ~/anaconda3/lib/ | grep ffi
- 1
- 2
- 3
- 4
- 5
我们看到两个库不一样,一个是7.1.0,一个是8.1.2 ,因此把anaconda下的libffi.so.7指向系统的7.1.0
cd ~/anaconda3/lib/lib
sudo rm libffi.so.7
sudo ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
#再次查看
ll ~/anaconda3/lib/ | grep ffi
- 1
- 2
- 3
- 4
- 5
2.3 添加环境变量
cmake时候打开了 OPENCV_GENERATE_PKGCONFIG,在系统/usr/local/lib/pkgconfig下自动生成了opencv4.pc文件,里面记录了OpenCV头文件、库文件的路径。
类似于:
nano ~/.bashrc
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
#若上面没用
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opencv4.10/opencv-4.10.0/build/lib
# 添加完后 先Ctrl+O保存,按Enter确定,再Ctrl+X退出nano编辑器
# 更新环境变量配置文件
source ~/.bashrc
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
2.4 版本验证
1、查看安装情况
#终端输入以下两命令,显示正常则安装成功
pkg-config --modversion opencv4 #查看版本号
pkg-config --libs opencv4 #查看libs库
- 1
- 2
- 3
2、程序测试
cd ~/opencv-4.10.0/samples/cpp/example_cmake
mkdir build
cd ./build
cmake ..
make
./opencv_example
- 1
- 2
- 3
- 4
- 5
- 6
2.5 卸载opencv
cd opencv-4.10.0/build/
#删除可执行文件、lib文件、头文件等
sudo make uninstall
#删除空的文件夹
sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv*
#删除cmake相关文件
sudo make clean
#删除所有
sudo rm rf *
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
三、配置c++/opencv开发环境
使用CMakeLists.txt配置opencv。
cmake_minimum_required(VERSION 3.10) # 指定 cmake的 最小版本
project(demo) # 设置项目名称
#set(OpenCV_DIR /usr/local/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
add_executable(demo main.cpp) # 生成可执行文件
target_link_libraries(demo ${OpenCV_LIBS} ) # 设置target需要链接的库
- 1
- 2
- 3
- 4
- 5
- 6
- 7
评论记录:
回复评论: