64位linux下安装opencv3.1及调试
1.安装
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
git clone https://github.com/Itseez/opencv.git git clone https://github.com/Itseez/opencv_contrib.git cd opencv git checkout 3.1.0 cd .. cd opencv_contrib git checkout 3.1.0 cd .. cd opencv mkdir release cd release
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib/modules ..
//CMAKE_INSTALL_PREFIX指定编译出的库放在哪里 //OPENCV_EXTRA_MODULES_PATH 指定opencv_contrib/modules 的路径 make sudo make install
2.debug
以下记录我自己遇到的bug以及解决方案
2.1错误
make[2]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/src/graphcuts.cpp.o] Error 1 make[1]: *** [modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/all] Error 2 make: *** [all] Error 2
的错误。
那是因为 cuda-8.0
与OpenCV 3.1.0
发生了冲突。解决方法:修改openCV 3.1.0
源码,使其兼容cuda-8.0
编辑 即vim opencv/modules/cudalegacy/src/graphcuts.cpp
将第四十五行位置的
#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
改为
#if !defined(HAVE_CUDA)||defined(CUDA_DISABLER)||(CUDART_VERSION>=8000)
再执行make -j16 (j16 指定为16个线程来执行make)
2.2 错误
/home/epinux/dev/opencv_contrib/modules/tracking/include/opencv2/tracking/onlineMIL.hpp:57:23: error: expected unqualified-id before ‘>’ token
#define sign(s) ((s > 0 ) ? 1 : ((s<0) ? -1 : 0))
^
/home/epinux/dev/opencv_contrib/modules/tracking/include/opencv2/tracking/onlineMIL.hpp:57:23: error: expected ‘)’ before ‘>’ token
/home/epinux/dev/opencv_contrib/modules/tracking/include/opencv2/tracking/onlineMIL.hpp:57:23: error: expected ‘)’ before ‘>’ token
modules/python2/CMakeFiles/opencv_python2.dir/build.make:296: 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:13133: 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
将opencv_contrib/modules/tracking/include/opencv2/tracking/onlineMIL.hpp 第57行的 #define sign(s) ((s > 0 ) ? 1 : ((s<0) ? -1 : 0)) 给剪切掉
再讲将上面一段代码复制到opencv_contrib/modules/tracking/src/onlineMIL.cpp 中预定义的位置即可
接着再执行 make -j8