[環境配置]Ubuntu 16.04 源碼編譯安裝OpenCV-3.2.0+OpenCV_contrib-3.2.0及產生的問題


1.OpenCV-3.2.0+OpenCV_contrib-3.2.0編譯安裝過程

1)下載官方要求的依賴包

  • GCC 4.4.x or later
  • CMake 2.6 or higher
  • Git
  • GTK+2.x or higher, including headers (libgtk2.0-dev) # 控制opencv GUI
  • pkg-config
  • Python 2.6 or later and Numpy 1.5 or later with developer packages (python-dev, python-numpy)
  • ffmpeg or libav development packages: libavcodec-dev, libavformat-dev, libswscale-dev
  • [optional] libtbb2 libtbb-dev
  • [optional] libdc1394 2.x
  • [optional] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev
$ 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 # 優化opencv功能
$ sudo apt-get install ffmpeg

2)下載OpenCV-3.2.0+OpenCV_contrib-3.2.0

$ cd /the_path_you_would_install
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip
$ wget https://github.com/opencv/opencv_contrib/archive/3.2.0.zip

直接右鍵解壓,然后進行安裝。

$ cd opencv-3.2.0
$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.2.0/modules/ ..
$ make -j8 #如果線程足夠多可以使用 make -j12
$ sudo make install

第四行最后的 .. 一定不能忘記,因為我們是在/build文件夾中編譯上層文件夾的程序。

$ sudo ldconfig -v
$ pkg-config --modversion opencv #確認OpenCV的版本,如果顯示3.2.0說明安裝完成

2.遇到的問題及解決方案

1)關於opencv_lapack.h缺失的問題

問題如下 

In file included from /home/yao/opencv-3.2.0/modules/core/src/hal_internal.cpp:49:0:
/home/yao/opencv-3.2.0/build/opencv_lapack.h:2:45: fatal error: LAPACKE_H_PATH-NOTFOUND/lapacke.h: No such file or directory
compilation terminated.
modules/core/CMakeFiles/opencv_core.dir/build.make:114: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/src/hal_internal.cpp.o' failed
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/src/hal_internal.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....

[ 27%] Built target pch_Generate_opencv_test_optflow
[ 27%] Built target pch_Generate_opencv_perf_optflow
[ 27%] Built target pch_Generate_opencv_test_phase_unwrapping
[ 27%] Built target pch_Generate_opencv_phase_unwrapping
[ 27%] Built target pch_Generate_opencv_test_stitching
[ 27%] Built target pch_Generate_opencv_test_structured_light
[ 27%] Built target pch_Generate_opencv_stitching
[ 27%] Built target pch_Generate_opencv_perf_stitching
[ 27%] Built target pch_Generate_opencv_structured_light
CMakeFiles/Makefile2:1901: recipe for target 'modules/core/CMakeFiles/opencv_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

解決方案

$ sudo apt-get install liblapacke-dev checkinstall
  • 在/build文件夾中找到opencv_lapack.h文件,把#include "LAPACKE_H_PATH-NOTFOUND/lapacke.h"改為#include "lapacke.h"
  • 重新編譯

(2)CUDA 9.0環境下cmake編譯時產生的問題

問題如下

在cmake時會產生關於CUDA版本的問題,這種情況在已裝CUDA的條件下會出現,未安裝時不會有。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
CUDA_nppi_LIBRARY (ADVANCED)
linked by target "opencv_cudev" in directory

這是由於CUDA 9.0不支持2.0架構,嘗試過網上其他方法,包括在cmake時給命令行加入配置屬性如CUDA的路徑以及配置,皆無效,而以下方案有效。

解決方案:

1) 在/opencv-3.2.0/cmake文件夾下找到FindCUDA.cmake文件

  • 找到
find_cuda_helper_libs(nppi)

改為

 find_cuda_helper_libs(nppial)
  find_cuda_helper_libs(nppicc)
  find_cuda_helper_libs(nppicom)
  find_cuda_helper_libs(nppidei)
  find_cuda_helper_libs(nppif)
  find_cuda_helper_libs(nppig)
  find_cuda_helper_libs(nppim)
  find_cuda_helper_libs(nppist)
  find_cuda_helper_libs(nppisu)
  find_cuda_helper_libs(nppitc)
  • 找到
set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppi_LIBRARY};${CUDA_npps_LIBRARY}")

改為

set(CUDA_npp_LIBRARY "${CUDA_nppc_LIBRARY};${CUDA_nppial_LIBRARY};${CUDA_nppicc_LIBRARY};${CUDA_nppicom_LIBRARY};${CUDA_nppidei_LIBRARY};${CUDA_nppif_LIBRARY};${CUDA_nppig_LIBRARY};${CUDA_nppim_LIBRARY};${CUDA_nppist_LIBRARY};${CUDA_nppisu_LIBRARY};${CUDA_nppitc_LIBRARY};${CUDA_npps_LIBRARY}")
  • 找到
unset(CUDA_nppi_LIBRARY CACHE)

改為

unset(CUDA_nppial_LIBRARY CACHE)
unset(CUDA_nppicc_LIBRARY CACHE)
unset(CUDA_nppicom_LIBRARY CACHE)
unset(CUDA_nppidei_LIBRARY CACHE)
unset(CUDA_nppif_LIBRARY CACHE)
unset(CUDA_nppig_LIBRARY CACHE)
unset(CUDA_nppim_LIBRARY CACHE)
unset(CUDA_nppist_LIBRARY CACHE)
unset(CUDA_nppisu_LIBRARY CACHE)
unset(CUDA_nppitc_LIBRARY CACHE)

2) 找到文件OpenCVDetectCUDA.cmake

刪除以下幾句

if(CUDA_GENERATION STREQUAL "Fermi")
    set(__cuda_arch_bin "2.0")

然后將下一行的elsif改為if

3) 找到文件opencv\modules\cudev\include\opencv2\cudev\common.hpp

添加頭文件

#include <cuda_fp16.h>

(3)不支持的GPU architecture問題

問題如下

nvcc fatal : Unsupported gpu architecture 'compute_20'

解決方案

在cmake的時候命令行的參數中加入如下一句

-D CUDA_GENERATION=Kepler 

(4)編譯到99%或100%時卡住的問題

問題如下

[100%] Built target opencv_perf_stitching
[100%] Built target opencv_python2

這個時候,會一直卡着

解決方案

  • 不要終止安裝,等一等,或者make -j8甚至make -j12多線程安裝可以快一點,一般幾分鍾可以安裝完成

5)在CMakeLists.txt中設置指定的OpenCV版本

解決方案

set(OpenCV_DIR "/your_opencv_path/opencv-3.2.0/build")
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

其中your_opencv_path指你的opencv的安裝路徑,注意區分大小寫。

6)CUDA安裝的問題

解決方案

$ sudo add-apt-repository ppa:graphics-drivers/ppa

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM