当前位置:   article > 正文

Linux下opencv4的c++接口版本的安装_ocv_download

ocv_download

系统是ubuntu16,安装方式网上资料一大把,这里把基本流程介绍下,然后介绍下自己解决的问题:
先下载,然后安装各种依赖,然后:
(预先解决Q1,Q2的问题)
step1.生成makefile,如下是最基本的cmake选项,不用增加其他额外的就能安装成功。

cd opencv-4.1.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release ..
  • 1
  • 2
  • 3
  • 4

(预先解决Q6, Q7, Q8的问题)
如果是同时安装opencv和opencv_contrib,则先要把opencv_contrib解压缩到opencv主安装文件夹的根目录下,也就是opencv/opencv_contrib这样的文件夹嵌套和文件名,这是接下来cmake语句的要求结构。然后把上面语句换成如下,其中cmake的编译选项每一项都不能缺少。

cd opencv-4.1.0
mkdir build
cd build
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE:BOOL=ON ..
  • 1
  • 2
  • 3
  • 4

step2.编译,make -j8,
step3.安装,sudo make install

安装过程可能的问题:

Q1. 编译时提示ippicv库无法下载?

原因是github下载太慢,解决办法是手动下载,然后随便放到什么位置(我是放到opencv安装文件夹下),然后修改opencv安装文件/3rdparty/ippicv/ippicv.cmake文件中如下标记的一行,也就是指定下载文件为本地文件的路径。

ocv_download(FILENAME ${OPENCV_ICV_NAME}
               HASH ${OPENCV_ICV_HASH}
               URL
                 "${OPENCV_IPPICV_URL}"
                 "$ENV{OPENCV_IPPICV_URL}"
				"file:///media/ubuntu/4430C54630C53FA2/SuLiang/Mysoftwares/opencv-4.1.0/"  # 这行修改成自己路径
               DESTINATION_DIR "${THE_ROOT}"
               ID IPPICV
               STATUS res
               UNPACK RELATIVE_URL)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Q2. 编译时提示无法识别anaconda的库文件undefined reference to ZSTD_freeCStream’ //home/a401/anaconda3/lib/libtiff.so.5

解决办法参考:https://blog.csdn.net/Splend520/article/details/97270438,也就是把build路径时的跟annaconda环境变量去除。

echo $PATH  #可以看到如下显示的有跟anaconda相关的路径
/home/ubuntu/anaconda3/bin:/home/ubuntu/anaconda3/condabin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/cuda-9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

export PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/cuda-9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin   # 去除
  • 1
  • 2
  • 3
  • 4

Q3. 安装时提示无法拷贝文件?

原因是权限问题,需要用sudo make install

Q4. 安装好以后无法导入视频类videoCapture?

原因是视频库”opencv2/videoio.hpp”没有安装,因为在highgui.hpp库中,可以看到如下一段,其中opencv2/videoio.hpp是处于无法链接到源文件的未安装状态。
#ifdef HAVE_OPENCV_VIDEOIO
#include “opencv2/videoio.hpp”
#endif
想了很多方法包括补充相关库都没效果,最后换一个opencv版本尝试下。
于是卸载opncv3.5: 进入opencv的build安装目录, 运行sudo make uninstall即可。
然后安装opencv4.1版本,发现在make -j8的编译过程有built target opencv_videoio.
安装完成后,正常。

Q5. 安装好以后的导入

  • 方式1:预先把安装在/usr/local/lib和/usr/local/include/opencv的头文件和库文件添加到系统变量中,从而可以直接在程序中引用包含相关opencv头文件。
    原因是系统只会搜索默认路径/lib和/usr/lib的动态库,其他路径的动态库无法被直接搜索到.
  • 方式2:不用预先把opencv的头文件和库文件加入系统变量,则需要在cmakelists中先包含安装的头文件和库文件路径,然后才可以在程序中引用包含相关opencv头文件。
    以下是一个最简CmakeLists, 注意:opencv4之后需要c++11的支持。
cmake_minimum_required(VERSION 3.5)
project(3000_start_opencv LANGUAGES CXX)
add_definitions(-std=c++11) #c++11
find_package( OpenCV 4.1.0 REQUIRED ) #opencv
include_directories( ${OpenCV_INCLUDE_DIRS} ) #opencv
add_executable(3000_start_opencv main.cpp)
target_link_libraries( 3000_start_opencv ${OpenCV_LIBS}) #opencv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Q6. contrib库编译错误,编译时会针对contrib包提示部分文件下载失败,编译失败无法安装:

主要的文件包括:
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
vgg_generated_120.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_48.i
需要手动去下载,然后拷贝到opencv_contrib/modules/xfeatures2d/src/路径下即可
参考的下载路径可以搜索到,这里就不提供了。

Q7. contrib库编译时会报错找不到contrib测试时需要的opencv/module包里的文件:~/opencv-4.2.0/opencv_contrib/modules/xfeatures2d/test/test_features2d.cpp:51:62: fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory

也就是找不到这个文件test_detectors_regression.impl.hpp但我在features2d/test/路径下能找到这个文件。根本原因是在contrib安装时无法链接到opencv包里边的test支持文件,解决办法就是把所有缺失的相关文件从opencv/modules/feature2d/test文件夹都拷贝到opencv/contrib/modules/xfeatures2d/test文件夹中,并且手动修改contrib中报错的那几个test_xxx文件中头文件的include路径,都从features/modules修改到本地,比如:

// #include "features2d/test/test_detectors_regression.impl.hpp"
// #include "features2d/test/test_descriptors_regression.impl.hpp"
// 上面是原代码,修改为如下形式
#include "test_detectors_regression.impl.hpp"
#include "test_descriptors_regression.impl.hpp"
  • 1
  • 2
  • 3
  • 4
  • 5

Q8. 安装成功contrib库,但调用SIFT算法依然报错This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in function ‘create’

这是因为SIFT/SURF算法都受版权保护,不能直接使用,解决办法参考:https://answers.opencv.org/question/201938/how-can-i-set-opencv_enable_nonfree-cmake-option-and-rebuild-the-library-in-function-create/
即需要在编译时增加选项-D OPENCV_ENABLE_NONFREE:BOOL=ON

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/119907
推荐阅读
相关标签
  

闽ICP备14008679号