保姆级教程-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/releasesgithub.com/opencv/opencv/releases
https://github.com/opencv/opencv_contrib/releasesgithub.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
问题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文件时,路径是否正确,见上文。
感谢您阅读到最后!😊总结不易,希望多多支持~🌹 点赞👍收藏⭐评论✍️,您的三连是我持续更新的动力💖~