一、安装编译工具和依赖项
温馨提示:
一般下载安装各种包优先:
sudo apt-get update
安装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
二、下载OpenCV源码并解压缩
温馨提示:
一般下载安装项目脚本尽量github克隆下来(完整性更高,修改方便,跑程序更是,血一般的教训!!!)
cd ~
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
三、使用CMake配置OpenCV的编译选项
默认安装cpu版本:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_3.4.20 -D OPENCV_EXTRA_MODULES_PATH=/home/itheima/tools/OpenCV/opencv_3.4.20/opencv_contrib-3.4.20/modules -D OPENCV_GENERATE_PKGCONFIG=ON -D OPENCV_ENABLE_NONFREE=True .
默认安装gpu版本(后续有机会补充)原来学深度学习用的到,现在换方向搞slam,唉。。。
注意事项:
各个参数释义如下:
CMAKE_BUILD_TYPE 是opencv安装的版本,Release和Debug两种可选,默认安装Release
CMAKE_INSTALL_PREFIX 是opencv的安装地址 (不设置该参数默认安装在/usr/locol/...)
强烈建议设置该参数CMAKE_INSTALL_PREFIX=/usr/local/opencv_----
OPENCV_ENABLE_NONFREE 是否使用部分被申请了专利的计算方法 这里选True
OPENCV_GENERATE_PKGCONFIG 是否开启生成.pc文件(可以指令查看版本)
强烈建议设置该参数 opencv4版本及以上开启
注意事项:
该指令在我的电脑上opencv-3.4.20、opencv-4.2.0、opencv-4.9.0构建成功。
具体是否可行还要一一尝试!!!
四、编译OpenCV
强烈建议编译之前先查看CPU的核心数:
nproc
16
根据核心数来调整make指令的参数 x(建议不用堆满cpu缓存,可能会卡住)
make -j x
sudo make install
其中,-j x指定使用x个线程进行编译。
sudo make install 安装部署
五、添加到系统环境变量
gedit .bashrc
增加如下内容到最下面
#OpenCV_3.4.20
export PKG_CONFIG_PATH=/usr/local/opencv_3.4.20/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/opencv_3.4.20/lib
刷新环境变量
source .bashrc
查看opencv版本
pkg-config --modversion opencv #查看3.x版本
pkg-config --modversion opencv4 #查看4.x版本
tips list
pkg-config --modversion opencv
pkg-config --cflags opencv
pkg-config --libs opencv
六、OpenCV多版本共存与切换
在开发不同项目时可能会需要不同版本的OpenCV,在电脑上安装多个版本的OpenCV很有必要。
多版本切换关键是安装到不同路径,并在CMakeLists.txt中找到需要的版本。
在CMakeLists.txt中可设置手动寻找OpenCV的指定路径,如下:
set(OpenCV_DIR /usr/local/opencv_4.2.0/lib/cmake/opencv4)
find_package(OpenCV 4 REQUIRED)
注意事项:
设置 set(OpenCV_DIR /usr/local/opencv_4.2.0/lib/cmake/opencv4)
目的1:设置opencv路径的时候,主要是找有OpenCVConfig.cmake文件的文件夹,我的安装目录是上面那个,OpenCVConfig.cmake文件在上述路径中找到,因此添加这个路径。
目的2:为了在构建或编译工程时避免libopencv与core.so发生冲突,致使编译失败。
如果不进行手动寻找OpenCV的指定路径的话,而只是自动寻找系统路径下配置的OpenCV的话,只需如下指令:
第一个表示自动寻找系统库里版本4以上的,第二个表示找系统库里的最低版本。
find_package(OpenCV 4 REQUIRED)
或者
find_package(OpenCV REQUIRED)
假设我们已经安装好一版OpenCV,一般都安装在/usr/local下。如果需要安装另一个版本的OpenCV,就不能再安装到/usr/local,而是选择其他路径,否则会覆盖掉之前的版本。
只需要在 .bashrc 文件中注释掉你当前不需要的版本(也就是每个版本对应的三行代码)
注意事项!!!
当前不使用的版本请立即注释消去(ros安装会自带libopencv、版本不一致会冲突,会导致roscore失效—目前我发现的问题—)。