保姆级教程-ubuntu20.04安装opencv流程及注意事项

数据及依赖文件准备

第一步,首先要保证已经下载好依赖文件:

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 python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install ffmpeg 

第二步:从GitHub下载opencv和opencv_contrib源码,我这边下载的是4.11.0版本,注意OpenCV和contirb版本对应下载链接如下,下载完成后解压并将opencv_contrib解压文件放入opencv文件夹中。

https://github.com/opencv/opencv/releases​github.com/opencv/opencv/releases
https://github.com/opencv/opencv_contrib/releases​github.com/opencv/opencv_contrib/releases
在这里插入图片描述


tar -zxvf opencv-4.11.0.tar.gz
tar -zxvf opencv_contirb-4.11.0.tar.gz
sudo cp -r opencv_contrib-4.11.0 opencv-4.11.0
sudo mkdir build
cd bulid

上述操作完成后,opencv文件夹下数据文件如下:
在这里插入图片描述

编译安装

1、生成makefile文件
提示:此处需要注意编译命令中的可选项,否则容易出现问题,需要重新编译,问题下一章节进行记录:
使用命令生成makefile文件, 这里的命令要根据自己的路径进行修改,编译过程比较快,但是要注意编译的可选项是否正确设置,命令如下:

> sudo cmake -D CMAKE_BUILD_TYPE=Release -D BUILD_TIFF=ON  -D BUILD_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/shiqi/opencv-4.11.0/opencv_contrib-4.11.0/modules/ ..

2、进行make编译

这个根据自己的设备进行选择,多核心编译能加快速度,比如4核可以设置-j4, 编译过程视设备性能而定,大概几分钟到几十分钟。

sudo make -j8

3、配置路径,执行下面命令配置环境变量。

 sudo gedit /etc/ld.so.conf.d/opencv.conf 
 /usr/local/lib 

执行生效命令:

sudo ldconfig 

然后添加路径:

sudo gedit /etc/bash.bashrc 

在文件末尾添加写入:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

保存退出,执行更新命令,以上就是全部的编译安装过程,但是编译完成并不意味着能够成功使用,还有可能遇到一些问题,下边记录一下遇到的问题及解决办法。

source /etc/bash.bashrc
sudo updatedb

遇见的问题及解决方案:

问题1.undefined reference to `TIFFReadDirectory@LIBTIFF_4.0’
在这里插入图片描述解决办法1: 在cmake编译opencv时候加参数编译 -D BUILD_TIFF=ON,然后重新编译,成功。
解决办法2: conda uninstall libtiff “此方法对我无用”
解决办法3: conda remove libtiff “此方法对我无用”

问题2.undefined reference to `cv::Mat::zeros(cv::Size_, int)’
在这里插入图片描述

解决办法1: g++ aa.cpp `pkg-config --cflags --libs opencv,成功。

问题3.'/usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link
在这里插入图片描述

解决办法,注意根据自己设备修改“”cuda-11.7“”:

sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
sudo ln -sf /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.9.7 /usr/local/cuda-11.7/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8

解决办法1: g++ aa.cpp `pkg-config --cflags --libs opencv,成功。

问题4.pkg-config --modversion opencv4查看时提示没有opencv4.pc或者提示No package ‘opencv’ found

解决办法1:编译时添加以下命令,OpenCV4以上版本默认不使用pkg-config,该编译选项开启生成opencv4.pc文件,支持pkg-config功能。

-D OPENCV_GENERATE_PKGCONFIG=YES

解决办法2:若执行方法1仍未生成opencv.pc,可自行创建。

sudo gedit /usr/local/lib/pkgconfig/opencv4.pc

把下面的写进去:

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/x86_64-linux-gnu
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.11.0
Libs: -L${prefix}/lib -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

注意prefix=/usr/local是你的安装路径,对应camke命令中的-D CMAKE_INSTALL_PREFIX=/usr/local \,Version: 4.11.0是版本号,如果是带cuda的,参考以下:

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv4/opencv
includedir_new=${prefix}/include/opencv4

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 4.11.0
Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio -lopencv_features2d -lopencv_calib3d -lopencv_dnn -lopencv_cudafilters -lopencv_cudaimgproc -lopencv_cudawarping -lopencv_stitching -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_ml -lopencv_videostab -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_ximgproc -lopencv_viz
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

然后保存并退出,这次再运行可以查看版本号。

source ~/.bashrc
sudo ldconfig

问题6:
error: ‘CV_RGB2BGR’ was not declared in this scope; did you mean ‘CV_RGB’?
error: ‘CV_BGR2GRAY’ was not declared in this scope

解决方法:添加 #include <opencv2/imgproc/types_c.h>

问题7:CMake Error at cmake/OpenCVModule.cmake:352 (message): Duplicated modules NAMES

解决方法:
1、检查opencv_contrib包下载是否正确,去opencv官网那个下载对应的contrib模块,正确的对应contrib模块名字是opencv_contrib-3.**,而不是opencv_contrib-master。
2、检查编译命令中生成makefile文件时,路径是否正确,见上文。


感谢您阅读到最后!😊总结不易,希望多多支持~🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏脾气的小十七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值