Ubuntu18.04 安装 OpenCV4.3 及环境配置

转载请注明作者和出处: http://blog.csdn.net/john_bh/

1. 下载源文件

在官方网站下载OpenCV 4.3.0安装包,在GitHub上下载OpenCV-contrib模块。安装过程主要参考OpenCV官方文档
官方下载例子:

$ git clone https://github.com/opencv/opencv.git
$ git clone https://github.com/opencv/opencv_contrib.git

或者可以在OpenCV 官方下载sources文件和opencv_contrib releases 文件:OpenCV4.3 官方sources 文件下载opencv_contrib releases 文件下载
在这里插入图片描述
在这里插入图片描述
我采用离线安装:下载opecv4.3和opencv_contrib releases。然后解压处理:

$ unzip opencv-4.3.0.zip

在这里插入图片描述
对解压的文件夹进行重命名:

$ mv opencv-4.3.0 opencv4.3
$ unzip opencv_contrib-4.3.0.zip

在这里插入图片描述

对解压的文件夹进行重命名:

$ mv opencv_contrib-4.3.0 opencv_contrib_4.3

2. 安装依赖

首先是一些必须安装的依赖项:

$ 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

3. 编译安装

3.1 预先下载依赖包

先不要着急编译安装,因为在编译过程中需要一些依赖包,cmake在安装过程中,网络原因会导致一些文件下载失败,所以可以预先下载,拷贝到对应的目录,并且修改编译文件。

  1. ippicv
    在文件~/opencv4.3/3rdparty/ippicv/ippicv.cmake 中找3个关键值:
    43行:下载目录的地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/
    5行:IPPICV_COMMIT值:a56b6ac6f030c312b2dce17430eef13aed9af274
    10行:文件名:ippicv_2020_lnx_intel64_20191018_general.tgz
    三个值组合起来,就是下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_lnx_intel64_20191018_general.tgz
    下载好了之后,直接放到~/opencv4.3/3rdparty/ippicv/目录下,修改 ippicv.cmake文件的第42行:

    #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
    "file:///xxxxx/opencv4.3/3rdparty/ippicv/"
    

    我把下载好的放到csdn上了,下载链接:https://download.csdn.net/download/john_bh/12739700

  2. boostdesc_bgm.i

    boostdesc_bgm.i
    boostdesc_bgm_bi.i
    boostdesc_bgm_hd.i
    boostdesc_lbgm.i
    boostdesc_binboost_064.i
    boostdesc_binboost_128.i
    boostdesc_binboost_256.i

    预先下载文件,把这7个文件拷贝到 ~/opencv_contrib_4.3/modules/xfeatures2d/src/文件夹下;
    修改 ~/opencv_contrib_4.3/modules/xfeatures2d/cmake/download_boostdesc.cmake 文件27行:

    #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/"
    "file:///xxxxx/opencv_contrib_4.3/modules/xfeatures2d/src"	
    
  3. vgg

    vgg_generated_120.i
    vgg_generated_64.i
    vgg_generated_80.i
    vgg_generated_48.i

    预先下载文件,把这4个文件拷贝到 ~/opencv_contrib_4.3/modules/xfeatures2d/src/文件夹下;
    修改 ~/opencv_contrib_4.3/modules/xfeatures2d/cmake/download_vgg.cmake 文件21行:

     #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/"
    "file:///xxxxx/opencv_contrib_4.3/modules/xfeatures2d/src"	
    

    我把下载好的放到csdn上了,下载链接:https://download.csdn.net/download/john_bh/12739700

  4. face_landmark_model.dat.zip
    下载地址:https://raw.githubusercontent.com/opencv/opencv_3rdparty/8afa57abc8229d611c4937165d20e2a2d9fc5a12/face_landmark_model.dat
    下载完成后,把face_landmark_model.dat.zip 放到文件夹~/opencv_contrib_4.3/modules/face/ 中,修改 ~/opencv_contrib_4.3/modules/face/CMakeLists.txt 19行:

    #"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"
    "file:///xxxxx/opencv_contrib_4.3/modules/face/"     
    

    我把下载好的放到csdn上了,下载链接:https://download.csdn.net/download/john_bh/12739700

  5. ade-0.1.1f.zip
    打开~/opencv4.3/modules/gapi/cmake/DownloadADE.cmake文件,按照文件第10行指定的网址下载ade-0.1.1f.zip文件,并将其重命名为v0.1.1f.zip,f放到该文件夹下,并修改第10行:

    #"https://github.com/opencv/ade/archive/"
    "file:///xxxx/opencv4.3/modules/gapi/cmake/"
    

    我把下载好的放到csdn上了,下载链接:https://download.csdn.net/download/john_bh/12739700

3.2 cmake 编译

  • 创建编译文件夹build:
    在文件夹~/opencv4.3/中新建build编译文件夹:

    $ mkdir build
    $ cd build/
    
  • cmake编译:
    官方例子:

    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
    

    这里我需要支持CUDA的OpenCV,所以,我的cmake 命令如下:

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D CMAKE_INSTALL_PREFIX=~/opencv4.3_install/ \ #安装路径和编译路径不是同一个,如果同一个在后边make install 会报错
          -D WITH_CUDA=ON \ #使用CUDA
          -D WITH_CUBLAS=ON \
    	  -D CUDA_ARCH_BIN='7.5' \ #指定GPU算力,在NVIDIA官网查询
          -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib_4.3/modules \ #opencv_contrib modules路径
          -D OPENCV_GENERATE_PKGCONFIG=YES ..
    
    • CMAKE_INSTALL_PREFIX :安装路径,如果没特殊需求建议就用/usr/local,注意有的时候安装路径和编译路径是同一个,make install 会报错;
    • WITH_CUDA=ON:使用CUDA;
    • CUDA_ARCH_BIN='7.5':指定GPU算力,在NVIDIA官网查询;
    • OPENCV_ENABLE_NONFREE=YES:允许使用申请了专利的一些算法,必须加上这句;
    • OPENCV_EXTRA_MODULES_PATH:contrib包的路径,例如我的是~/opencv_contrib_4.3/modules;
    • OPENCV_GENERATE_PKGCONFIG 因为opencv4默认不生成.pc文件,所以加上这句用于生成opencv4.pc文件,支持pkg-config功能。
      在这里插入图片描述
      NVIDIA官网查询算力。 使用命令:nvidia-smi 查看GPU型号,我的是 GeForce RTX 2080 ,对应的算力如下图: 在这里插入图片描述
      cmake命令的结果中可以看到是否支持CUDA以及Python情况。
      在这里插入图片描述

3.3 make

  1. make

    #使用nproc确定CPU核心数
    $ nproc
    $ make -j12 #根据CPU核心数确定编译线程数(我的是12)
    

    在这里插入图片描述
    make 成功:在这里插入图片描述
    make -j12 中遇到的问题以及解决办法:
    参考链接:https://github.com/opencv/opencv_contrib/issues/1950

    错误1:~/opencv_contrib_4.3/modules/xfeatures2d/test/test_features2d.cpp:51:62: fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
    在这里插入图片描述
    解决办法:修改:~/opencv_contrib_4.3/modules/xfeatures2d/test/test_features2d.cpp

    //#include "features2d/test/test_detectors_regression.impl.hpp"
    //#include "features2d/test/test_descriptors_regression.impl.hpp"
    #include "~/opencv4.3/modules/features2d/test/test_detectors_regression.impl.hpp"
    #include "~/opencv4.3/modules/features2d/test/test_descriptors_regression.impl.hpp"
    

    错误2:~/opencv_contrib_4.3/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp:7:82: fatal error: features2d/test/test_detectors_invariance.impl.hpp: 没有那个文件或目录 在这里插入图片描述
    解决办法:修改 ~/opencv_contrib_4.3/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp

    //#include "features2d/test/test_detectors_invariance.impl.hpp" // main OpenCV repo
    //#include "features2d/test/test_descriptors_invariance.impl.hpp" // main OpenCV repo
    #include "~/opencv4.3/modules/features2d/test/test_detectors_invariance.impl.hpp" // main OpenCV repo
    #include "~/opencv4.3/modules/features2d/test/test_descriptors_invariance.impl.hpp" // main OpenCV repo
    

    错误3:~/opencv4.3/samples/gpu/surf_keypoint_matcher.cpp:11:40: fatal error: opencv2/xfeatures2d/cuda.hpp: 没有那个文件或目录 在这里插入图片描述
    解决办法:修改~ /opencv4.3/samples/gpu/surf_keypoint_matcher.cpp:

    //#include "opencv2/xfeatures2d/cuda.hpp"
    #include "~/opencv_contrib_4.3/modules/xfeatures2d/include/opencv2/xfeatures2d/cuda.hpp" 
    
  2. make install:

    $ sudo make install
    

    在这里插入图片描述
    在这里插入图片描述

    错误1:CMake Error at apps/annotation/cmake_install.cmake:47 (file): file INSTALL cannot find
    在这里插入图片描述
    解决办法:参考链接:https://stackoverflow.com/questions/47248882/opencv-error-file-install-cannot-find-bin-opencv-annotation
    在某些Linux发行版中,当build目录与安装目录相同时会发生此错误,修改安装目录,区别安装目录和build 目录。

4. 环境配置

4.1 动态库配置

配置OpenCV动态库环境——程序执行时加载动态库*.so的路径。

$ sudo echo "~/opencv4.3_install/lib/"  >> /etc/ld.so.conf.d/opencv4.3.conf
#使配置生效
$ sudo ldconfig

4.2 配置OpenCV的PKG-CONFIG环境

  1. 修改opencv4.pc文件:

    $ sudo find / -iname opencv4.pc
    /home/XXXX/opencv4.3_install/lib/pkgconfig/opencv4.pc
    /home/XXXX/opencv4.3/build/unix-install/opencv4.pc
    

    如果上述配置成功,则会在~/opencv4.3_install/lib/文件夹中出现一个pkgconfig文件夹,里面有一个opencv.pc文件,内容大致如下:

    # Package Information for pkg-config
    
    	prefix=/home/XXXX/opencv4.3_install
    	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.3.0
    	Libs: -L${exec_prefix}/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_cudabgsegm -lopencv_cudafeatures2d -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_cudacodec -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_cudaoptflow -lopencv_optflow -lopencv_cudalegacy -lopencv_videoio -lopencv_cudawarping -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_imgproc -lopencv_cudaarithm -lopencv_core -lopencv_cudev
    	Libs.private: -lm -lpthread -lcudart_static -ldl -lrt -lnppc -lnppial -lnppicc -lnppicom -lnppidei -lnppif -lnppig -lnppim -lnppist -lnppisu -lnppitc -lnpps -lcublas -lcudnn -lcufft -L-L/usr/local/cuda -llib64 -L-L/usr/lib -lx86_64-linux-gnu
    	Cflags: -I${includedir_old} -I${includedir_new}
    

    注意:需要将第6行修改为:

    includedir_old=${prefix}/include/opencv4/opencv2
    

    如果没有自动生成,可以试着新建一个文件,将上述的内容复制进去,继续下一步;

  2. 配置环境

    方法一(4.4的配置方法):
    /usr/local/opencv4.4/opencv4/build/lib/pkgconfig/路径加入PKG_CONFIG_PATH

    sudo vim /etc/profile.d/pkgconfig.sh
    

    在文件中加入下面一行:

    export PKG_CONFIG_PATH=/usr/local/opencv4.4/opencv4/build/lib/pkgconfig:$PKG_CONFIG_PATH
    

    保存退出后,使用命令激活:

    $ source /etc/profile
    

    方法2(4.3的配置方法):
    .bashrc文件中添加 PKG_CONFIG_PATH

    sudo vim ~/.bashrc
    

    在文件最后添加:

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/XXXX/opencv4.3_install/lib/pkgconfig
    export PKG_CONFIG_PATH
    

    保存退出后,使用命令激活:

    $ source ~/.bashrc
    
  3. 验证是否配置成功:

    $ pkg-config --libs opencv4		
    

    在这里插入图片描述
    判断路径时候添加成功:

    $ echo $PKG_CONFIG_PATH
    /home/XXXX/opencv4.3_install/lib/pkgconfig
    

4.3 Python-OpenCV环境

这里使用之前配置opencv4.4的例子。
找到编译好的python cv库:

$ sudo find / -iname cv2*.so

/usr/local/lib/python3.6/dist-packages/cv2/cv2.cpython-36m-x86_64-linux-gnu.so
/usr/local/lib/opencv4.4/opencv4/build/lib/python3/cv2.cpython-36m-x86_64-linux-gnu.so
/usr/local/lib/opencv4.4/opencv4/build/lib/cv2.so
/usr/local/opencv4.4/opencv4/build/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so
/usr/local/opencv4.4/opencv4/build/lib/python2.7/dist-packages/cv2/python-2.7/cv2.so
find: ‘/run/user/1000/gvfs’: 权限不够

cv2.cpython-36m-x86_64-linux-gnu.so就是编译好的python3的opencv库,把它复制到对应python解释器的/path/to/dist-packages/(系统自带的python解释器)和/path/to/site-packages(用户安装的python解释器)目录下,之后就能在该python解释器中使用python-opencv库。

链接到系统自带的python3解释器中:

$ sudo ln -s /usr/local/opencv4.4/opencv4/build/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so /usr/lib/python3/dist-packages/cv2.so

链接到Anaconda创建的虚拟环境python3解释器中:

$ ln -s /usr/local/opencv4.4/opencv4/build/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so ~/anaconda3/lib/python3.7/site-packages/cv2.so

5. 测试OpenCV

环境配置完成,对我们安装的OpenCV进行测试:

cd /home/XXXX/opencv4.3/samples/cpp/example_cmake/

修改example.cpp 文件:

	#include "opencv2/core.hpp"
	#include "opencv2/imgproc.hpp"
	#include "opencv2/highgui.hpp"
	#include "opencv2/videoio.hpp"
	#include <iostream>
	
	using namespace cv;
	using namespace std;
	
	void drawText(Mat & image);
	
	int main()
	{
	    cout << "OpenCV version : " << CV_VERSION << endl;
	    cout << "Major version : " << CV_MAJOR_VERSION << endl;
	    cout << "Minor version : " << CV_MINOR_VERSION << endl;
	    cout << "Subminor version : " << CV_SUBMINOR_VERSION << endl;
	
	    cout << "Built with OpenCV " << CV_VERSION << endl;
	    Mat image;
	    VideoCapture capture;
	    capture.open(0);
	    if(capture.isOpened())
	    {
	        cout << "Capture is opened" << endl;
	        for(;;)
	        {
	            capture >> image;
	            if(image.empty())
	                break;
	            drawText(image);
	            imshow("Sample", image);
	            if(waitKey(10) >= 0)
	                break;
	        }
	    }
	    else
	    {
	        cout << "No capture" << endl;
	        image = Mat::zeros(480, 640, CV_8UC1);
	        drawText(image);
	        imshow("Sample", image);
	        waitKey(0);
	    }
	    return 0;
	}
	
	void drawText(Mat & image)
	{
	    putText(image, "Hello OpenCV",
	            Point(20, 50),
	            FONT_HERSHEY_COMPLEX, 1, // font face and scale
	            Scalar(255, 255, 255), // white
	            1, LINE_AA); // line thickness and type
	}
	

5.1 直接编译运行

$ g++ -std=c++11 example.cpp `pkg-config --libs --cflags opencv4` -o example
$ ./example

输出:
在这里插入图片描述
在这里插入图片描述

5.2 通过Makefile测试

  1. 修改目录下Malefile文件
    因为OpenCV 4.0需要C++11支持,且生成的pkg-config文件名为opencv4.pc,所以需要对当前目录下的Malefile文件进行修改:

    $ vim Makefile
    

    修改 CXXFLAGS += -c -Wall $(shell pkg-config --cflags opencv)CXXFLAGS += -c -std=c++11 -Wall $(shell pkg-config --cflags opencv4)
    修改LDFLAGS += $(shell pkg-config --libs --static opencv)LDFLAGS += $(shell pkg-config --libs --static opencv4)
    修改后如下:

    CXX ?= g++
     
    CXXFLAGS += -c -std=c++11 -Wall $(shell pkg-config --cflags opencv4)
    LDFLAGS += $(shell pkg-config --libs --static opencv4)
    
    all: opencv_example
    
    opencv_example: example.o; $(CXX) $< -o $@ $(LDFLAGS)
    
    %.o: %.cpp; $(CXX) $< -o $@ $(CXXFLAGS)
    
    clean: ; rm -f example.o opencv_example
    
    
  2. make生成可执行文件opencv_example

    $ make
    
  3. 运行生成的文件opencv_example:

    $ ./opencv_example
    

    输出:

    OpenCV version : 4.4.0
    Major version : 4
    Minor version : 4
    Subminor version : 0
    Built with OpenCV 4.4.0
    [ WARN:0] global /usr/local/lib/opencv4.4/opencv4/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
    No capture
    

在这里插入图片描述

5.3 通过Cmake测试

  1. 修改 CMakeLists.txt 文件
    因为更改了opencv的安装路径(~/opencv4.3_install/),所以测试前需要在CMakeLists.txt文件的10行find_package(OpenCV REQUIRED)前面加上:

    set(OpenCV_DIR /home/XXXX/opencv4.3_install/lib/cmake/opencv4/)
    

    CMakeLists.txt 文件:

    # cmake needs this line
    cmake_minimum_required(VERSION 3.1)
    
    # Define project name
    project(opencv_example_project)
    
    # Find OpenCV, you may need to set OpenCV_DIR variable
    # to the absolute path to the directory containing OpenCVConfig.cmake file
    # via the command line or GUI
    set(OpenCV_DIR /home/XXXX/opencv4.3_install/lib/cmake/opencv4/)
    find_package(OpenCV REQUIRED)
    
    # If the package has been found, several variables will
    # be set, you can find the full list with descriptions
    # in the OpenCVConfig.cmake file.
    # Print some message showing some of them
    message(STATUS "OpenCV library status:")
    message(STATUS "    config: ${OpenCV_DIR}")
    message(STATUS "    version: ${OpenCV_VERSION}")
    message(STATUS "    libraries: ${OpenCV_LIBS}")
    message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
    
    # Declare the executable target built from your sources
    add_executable(opencv_example example.cpp)
    
    # Link your application with OpenCV libraries
    target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})
    
    
  2. cmake
    输入:

    $ cmake .
    

    注意这里所处文件夹是example_cmake,这个文件夹里有CMakeLists.txt
    注意cmake 后面有个空格,有个“.”,一个点表示当前目录,两个点表示父目录
    在这里插入图片描述

  3. make

    $ make
    

在这里插入图片描述

  1. 运行生成的文件opencv_example
    ./opencv_example
    
    在这里插入图片描述

在这里插入图片描述

6. 多版本OpenCV 切换

  1. 打开终端输入命令:
    $ sudo gedit ~/.bashrc
    
  2. 在文件末尾增加以下内容:
    export PKG_CONFIG_PATH=/usr/local/opencv4.4/opencv4/build/lib/pkgconfig
    export LD_LIBRARY_PATH=/usr/local/opencv4.4/opencv4/build/lib
    
  3. 使配置生效:
    $ source ~/.bashrc  
    
  4. 查看opencv版本:
    $ pkg-config --modversion opencv
    
    查看opencv安装路径:
    sudo find / -iname "*opencv*"
    

参考链接:

  1. OpenCV4.3官方安装文档
  2. https://github.com/opencv/opencv_contrib/issues/1950
  3. https://stackoverflow.com/questions/47248882/opencv-error-file-install-cannot-find-bin-opencv-annotation
  • 9
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值