ubuntu16.04+cuda8.0+cudnn5.1+caffe------Opencv3.1.0安裝

1.安裝依賴項:

sudo apt-get install --assume-yes libopencv-dev build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev libtbb-dev libqt4-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip

然後安裝OpenCV需要的一些依賴項,一些文件編碼解碼之類的東東。

sudo apt-get install build-essential cmake git

sudo apt-get install ffmpeg libopencv-dev libgtk-3-dev python-numpy python3-numpy libdc1394-22 libdc1394-22-dev libjpeg-dev libpng12-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxine2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libv4l-dev libtbb-dev qtbase5-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils unzip

2.下載opencv3.1.0,解壓,放置位置例如/usr/local/opencv-310

cd opencv-310

sudo mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv-310 -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" ..(後面兩點不要忘記)安裝在opencv-310裏面了。

Opencv310+opencv_contrib310

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/usr/local/opencv310/opencv_contrib/modules/ ..  


cmake成功後,會出現如下結果,提示配置和生成成功:

-- Configuring done

-- Generating done

-- Build files have been written to: /usr/local/opencv-310/build

打開/usr/local/opencv310/modules/cudalegacy/src/graphcuts.cpp,修改爲:
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)||(CUDART_VERSION>=8000)

繼續sudo make -j8

make過程中出現nvcc warning:

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

解決方法:ctrl+c中斷,然後輸入:

cmake -DBLAS=Open -DCUDA_NVCC_FLAGS=--Wno-deprecated-gpu-targets ..

cmake成功後,會出現如下結果,提示配置和生成成功:

-- Configuring done

-- Generating done

繼續sudo make -j8,這個過程真漫長,不知道大牛們是不是也是這樣,無奈的等待,error.

[100%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
In file included from /usr/local/opencv310/build/modules/python2/pyopencv_generated_include.h:11:0,
                 from /usr/local/opencv310/modules/python/src2/cv2.cpp:12:
/usr/local/opencv310/opencv_contrib/modules/hdf/include/opencv2/hdf/hdf5.hpp:40:18: fatal error: hdf5.h: 沒有那個文件或目錄
compilation terminated.
modules/python2/CMakeFiles/opencv_python2.dir/build.make:285: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:19635: recipe for target 'modules/python2/CMakeFiles/opencv_python2.dir/all' failed
make[1]: *** [modules/python2/CMakeFiles/opencv_python2.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
make: *** [all] Error 2

原因:找不到hdf5.h的路徑
解決辦法:在opencv_contrib-3.1.0/modules/hdf/include/opencv2/hdf/hdf5.hpp 文件中修改第40行

#include <hdf5.h> 修改成#include "/usr/include/hdf5/serial/hdf5.h"

PS:每次修改文件後可直接執行make命令,不需要執行make clean。因爲執行make clean後會重新從頭編譯,那樣會浪費時間。

..................................................

Scanning dependencies of target opencv_python3
Scanning dependencies of target opencv_python2
[100%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
[100%] Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/__/src2/cv2.cpp.o
[100%] Linking CXX executable ../../bin/opencv_test_superres
[100%] Linking CXX executable ../../bin/opencv_perf_superres
[100%] Built target opencv_test_superres
[100%] Built target opencv_perf_superres
[100%] Linking CXX shared module ../../lib/python3/cv2.cpython-35m-x86_64-linux-gnu.so
[100%] Built target opencv_python3
[100%] Linking CXX shared module ../../lib/cv2.so
[100%] Built target opencv_python2

繼續sudo make install

-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_frontalcatface_extended.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_upperbody.xml
-- Installing: /usr/local/share/OpenCV/haarcascades/haarcascade_profileface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_profileface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_silverware.xml
-- Installing: /usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalcatface.xml
-- Installing: /usr/local/bin/opencv_traincascade
-- Set runtime path of "/usr/local/bin/opencv_traincascade" to "/usr/local/lib:/usr/local/cuda/lib64"
-- Installing: /usr/local/bin/opencv_createsamples
-- Set runtime path of "/usr/local/bin/opencv_createsamples" to "/usr/local/lib:/usr/local/cuda/lib64"
-- Installing: /usr/local/bin/opencv_annotation
-- Set runtime path of "/usr/local/bin/opencv_annotation" to "/usr/local/lib:/usr/local/cuda/lib64"

3.配置環境:


sudo gedit ~/.bashrc在文件末尾添加以下內容,然後保存:export PKG_CONFIG_PATH=/usr/local/opencv-310/lib/pkgconfigexport LD_LIBRARY_PATH=/usr/local/opencv-310/lib

source ~/.bashrc


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

輸入opencv的lib路徑:/usr/local/opencv-310/lib

sudo ldconfig



3.上面的這些過程並不能保證在寫makefile中調用的是3.10版本的庫,可能還是調用之前的2.4.13的庫,具體還是要在CMakeList.txt中指定要找的opencv的目錄,
opencv3.10的編譯目錄/usr/local/opencv-310/build 下找到OpenCVConfig.cmake 文件,並在CMakeList.txt中添加對應的路徑信息。這樣cmake的時候調用的就是3.10的庫,想切換成原來的2.4.10版本只需將第二步的bashrc文件和CMakeList.txt文件中修改的內容改成對應的opencv2.4.10的位置就好了。

# cmake needs this line
cmake_minimum_required(VERSION 2.8)
set (OpenCV_DIR "/usr/local/opencv-310/build")
# Define project name
project(myTest)
# 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
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 "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()
# Declare the executable target built from your sources
add_executable(demo demo.cpp)
# Link your application with OpenCV libraries
target_link_libraries(demo ${OpenCV_LIBS})

  1. # OpenCV  
  2. set(OpenCV_DIR "/home/xxx/Documents/Installers/opencv/opencv/build")  
  3. FIND_PACKAGE(OpenCV REQUIRED) 




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章