ubuntu18.04源码安装OpenCV3.4.1(使用该方法也成功安装过OpenCV4.1.0)

此方法应该可以通用,因为我使用此方法也安装了OpenCV4.1.0,一次性通过。但是在第一次安装OpenCV3.4.1的时候还是遇到了很多问题,这里以安装OpenCV3.4.1为例进行介绍。
1.下载对应版本OpenCV,选择sources包,下载链接:http://opencv.org/releases.html
2.移到非中文目录下,解压:

unzip opencv-3.4.1.zip

3.安装依赖库和cmake,执行下面命令,如出现问题,对应百度查找解决:
注意:一定要先更新安装g++和gcc为最新的版本(或者较高版本),否则在make时会出现各种莫名其妙的问题。

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

4.进入文件夹,创建build文件夹,进入build文件夹:

cd opencv-3.4.1
mkdir build
cd build

5.设置cmake编译参数,加入cuda-10.0路径(我cuda是10.0版本),要不然会报错

sudo cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CMAKE_LIBRARY_PATH=/usr/local/cuda-10.0/lib64/stubs -D CUDA_CUDA_LIBRARY=/usr/local/cuda-10.0/lib64/stubs/libcuda.so ..

如果要编译opencv contrib,先下载对应opencv_contrib版本https://github.com/Itseez/opencv_contrib/
然后在上面的上面cmake中加入下面这个选项后面是opencv_contib中modules的目录)

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules

变成:

sudo cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D CMAKE_LIBRARY_PATH=/usr/local/cuda-10.0/lib64/stubs -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules -D CUDA_CUDA_LIBRARY=/usr/local/cuda-10.0/lib64/stubs/libcuda.so ..

如果要指定安装位置,可以通过增加下面这个选项指定(安装多个版本时最好分别新建安装目录,否则会相互覆盖,使用时出现各种问题):

-D CMAKE_INSTALL_PREFIX=/usr/local/opencv3.4.1/

OpenCV4默认不生成.pc文件,OPENCV_GENERATE_PKGCONFIG=ON才会生成,所以安装opencv4以上,最好要加上这个选项,要不然用g++编译的时候找不到头文件。

6.使用make编译

sudo make -j8

以上可能报错,在我编译当中实际也遇到了一些问题,下面进行说明:
1)make的时候如果报找不到dynlink_nvcuvid.h(因为cuda10.0不再提供dynlink_nvcuvid.h)的错,则下载Video_Codec_SDK_9.0.20,在include目录下将.h文件复制到/usr/local/cuda/include/和/usr/local/cuda10.0/include/目录下,然后修改opencv3.4.1/modules/cudacodec/src/precomp.hpp

原:

 #if CUDA_VERSION >= 9000 
        #include <dynlink_nvcuvid.h>
    #else
        #include <nvcuvid.h>
    #endif

修改为:

  #if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000 
        #include <dynlink_nvcuvid.h>
    #else
        #include "nvcuvid.h"
    #endif

可能报错的不只是precomp.hpp文件,只要将对应的文件按上面的要就修改就可以了。
2)如果报如下错:

samples/gpu/CMakeFiles/example_gpu_driver_api_multi.dir/build.make:125: recipe for target 'bin/example_gpu_driver_api_multi' failed
make[2]: *** [bin/example_gpu_driver_api_multi] Error 1
CMakeFiles/Makefile2:39358: recipe for target 'samples/gpu/CMakeFiles/example_gpu_driver_api_multi.dir/all' failed
make[1]: *** [samples/gpu/CMakeFiles/example_gpu_driver_api_multi.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

说明找不到cuda libraries,需要修改 opencv3.4.1/samples/gpu/CMakeLists.txt文件
原:

foreach(sample_filename ${all_samples})
  ocv_define_sample(tgt ${sample_filename} gpu)
  ocv_target_link_libraries(${tgt} ${OPENCV_LINKER_LIBS} ${OPENCV_CUDA_SAMPLES_REQUIRED_DEPS})
  if(HAVE_opencv_xfeatures2d)
    ocv_target_link_libraries(${tgt} opencv_xfeatures2d)
  endif()

修改为:

foreach(sample_filename ${all_samples})
  ocv_define_sample(tgt ${sample_filename} gpu)
  ocv_target_link_libraries(${tgt} ${OPENCV_LINKER_LIBS} ${OPENCV_CUDA_SAMPLES_REQUIRED_DEPS})
  if(HAVE_CUDA AND NOT ANDROID)
    ocv_target_link_libraries(${tgt} ${CUDA_CUDA_LIBRARY})
  endif()
  if(HAVE_opencv_xfeatures2d)
    ocv_target_link_libraries(${tgt} opencv_xfeatures2d)
  endif()

3)提示缺少boostdesc_bgm.i
参考https://blog.csdn.net/AlexWang30/article/details/99612188?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

4)报错:

fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory
 #include "features2d/test/test_detectors_regression.impl.hpp"

解决方法:
将modules/features2d 复制到build目录下,参考https://blog.csdn.net/z1314520cz/article/details/103501274

sudo cp -r ~/opencv-3.4.1/modules/features2d ~/opencv-3.4.1/build
sudo make -j8

5)报错:

Could not find a package configuration file provided by "Qt5" with any of
  the following names:

    Qt5Config.cmake
    qt5-config.cmake

  Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
  to a directory containing one of the above files.  If "Qt5" provides a
  separate development package or SDK, be sure it has been installed.

解决方法:
增加这两包的安装:

sudo apt-get install qtbase5-dev
sudo apt-get install qtdeclarative5-dev

6)报错:

/usr/include/c++/4.9/sstream:502:11: note: ‘std::basic_stringstream<char>& std::basic_stringstream<char>::operator=(const std::basic_stringstream<char>&)is implicitly deleted because the default definition would be ill-formed:
     class basic_stringstream : public basic_iostream<_CharT, _Traits>
           ^
/usr/include/c++/4.9/sstream:502:11: error: use of deleted function ‘std::basic_iostream<char>& std::basic_iostream<char>::operator=(const std::basic_iostream<char>&)’
In file included from /usr/include/c++/4.9/iostream:40:0,
                 from /home/broliao/Desktop/opencv_contrib-4.2.0/modules/dnn_superres/samples/dnn_superres_multioutput.cpp:5:
/usr/include/c++/4.9/istream:795:11: note: ‘std::basic_iostream<char>& std::basic_iostream<char>::operator=(const std::basic_iostream<char>&)is implicitly deleted because the default definition would be ill-formed:
     class basic_iostream

解决办法:
可能是gcc版本过低,卸载原来的版本,更新比较高的版本。

7.执行命令:

sudo make install

sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境。

8.将OpenCV的库添加到路径:

sudo gedit /etc/ld.so.conf.d/opencv.conf 

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加:

/usr/local/lib 

9.更新:

sudo ldconfig

10.配置bash:

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

11.测试
使用源码自带的例子测试

cd opencv-3.4.1/samples/cpp/example_cmake
mkdir build
cd build
cmake ..
make
./opencv_example

即可看到打开了摄像头,在左上角有一个hello opencv
说明安装成功!
如果装了几个版本的opencv,想要指定某个版本编译,可以在CMakelists.txt中指定:

SET(OpenCV_DIR /usr/local/opencv3.4.1/share/OpenCV)
find_package(OpenCV REQUIRED)

12.如果要卸载,进入上面新建的build目录,执行下面命令:

sudo make uninstall

顺便介绍使用g++编译包含OpenCV头文件(#include <opencv2/opencv.hpp>)的方法:

1.生成可执行文件:

g++ opencv.cpp -o opencv `pkg-config --cflags --libs opencv`

如果编译错误,可能是g++的原因,尝试使用如下命令:

g++ opencv.cpp -o opencv `pkg-config --cflags --libs opencv` -std=c++11

(假设文件名是:opencv.cpp,生成的可执行文件名为:opencv)
2.生成动态链接库(.so文件):

g++ -shared -fPIC -o opencv.so opencv.cpp `pkg-config --cflags --libs opencv`

c++程序通过声明后,使用该方法生成的.so文件python也可调用

相关参考
https://blog.csdn.net/echoamor/article/details/83022352
https://blog.csdn.net/fengxinzioo/article/details/88740915
https://blog.csdn.net/cocoaqin/article/details/78163171

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值