保姆级教程-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

问题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文件时,路径是否正确,见上文。

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


公司简介-希奥国际贸易(深圳)有限公司
大容量U盘分区怎么设置?