Ubantu16.04下安装opencv3.1.0(在安装过ROS和anaconda3的环境下)

1.清理环境

首先明确两点opencv3和anaconda3路径存在冲突;opencv3和 ROS Kinetic存在冲突
所以,在安装opencv时,确保将anaconda3的系统路径以及ROS路径注释掉。具体操作:

  1. 打开命令行终端
  2. $ gedit .bashrc #打开用户变量文本
  3. 查看是否存在类似于“export PATH="/home/lpw/anaconda3/bin:$PATH" ”以及 “source /opt/ros/kinetic/setup.bash”
  4. 在之前加上 # 注释掉。

2. 安装opencv

参考链接:
link
link
link
注意:

  1. 依赖最好多安装一些,把这些链接中的依赖都安装了。
  2. 在使用 cmake -D一步,可使用:
    cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D BUILD_TIFF=ON -D WITH_QT=OFF -D WITH_OPENGL=ON …
    加入了 将不会出现: undefined reference to `TIFFReadDirectory@LIBTIFF_4.0’此类错误

3. 在make -j7后遇到的错误

(1)/libopencv_imgcodecs.so.3.1.0 undefined reference to `png_set_longjmp_fn’

出现这句话的关键原因在于:libopencv_imgcodecs没有找到linpng16.so.16这个文件,所以必须要让系统知道这个文件在哪。
解决方法:

  1. 查找整个电脑中的linpng16.so.16在哪里,我的是在:" lib/x86_64-linux-gnu/libpng16.so.16"
  2. 注意若没有,则需要安装linpng以及其依赖。
  3. 直接运行这句话,每次都要:
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib/x86_64-linux-gnu
  4. 添加这个路径到你的link.txt里,link.txt路径:opencv-3.1.0/build/modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/link.txt
    在其中加上你的路径,像这样插在中间:(省略了这个txt文件中间一部分)

/usr/bin/c++ -fPIC -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wno-narrowing -Wno-delete-non-virtual-dtor -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -msse -msse2 -mno-avx -msse3 -mno-ssse3 -mno-sse4.1 -mno-sse4.2 -ffunction-sections -fvisibility=hidden -fvisibility-inlines-hidden -Wno-deprecated-declarations -O3 -DNDEBUG -DNDEBUG -shared -Wl,-soname,libopencv_imgcodecs.so.3.1 -o …/…/lib/libopencv_imgcodecs.so.3.1.0 CMakeFiles/opencv_imgcodecs.dir/src/loadsave.cpp.o

…/…/…/3rdparty/ippicv/unpack/ippicv_lnx/lib/intel64/libippicv.a -lcudart -lnppc -lnppi -lnpps -lcufft -L/usr/local/cuda-8.0/lib64 -lz -ljpeg -lwebp -lpng -lz …/…/3rdparty/lib/liblibtiff.a -ljasper -ljpeg -lImath -lIlmImf -lIex -lHalf -lIlmThread -lcudart -lnppc -lnppi -lnpps …/…/lib/libopencv_core.so.3.1.0 /lib/x86_64-linux-gnu/libpng16.so.16 …/…/lib/libopencv_cudev.so.3.1.0 -lcufft -ljpeg -lwebp -lpng -ljasper -lImath -lIlmImf -lIex -lHalf -lIlmThread -lz -Wl,-rpath,/usr/local/cuda-8.0/lib64:/home/lpw/opencv/opencv-3.1.0/build/lib:

  1. 最重要的是!改完保存!不要关闭此txt文件,直接再运行 make -j16(或者make -j7等都可),因为在运行过程中此 link.txt 会自己改变(将会导致你刚加的那句话消失掉),所以在make -j16的过程中不断查看此link.txt不断保存,若是依旧在出现make -16过程中出现当前错误,那就再次修改link.txt。【原因:make -j16过程中有很多连接需要opencv_imgcodecs.o,所以会导致文本变化,但是修改过link.txt后就不会出现这个错误了,再次make -j16, 它将会保留上一次编译成功的部分】
  2. 总之,不断确保link.txt有路径** /lib/x86_64-linux-gnu/libpng16.so.16 ** 就行,直至make过程中不再出现错误:’/libopencv_imgcodecs.so.3.1.0 undefined reference to `png_set_longjmp_fn’

(2)modules/cudalegacy/CMakeFiles/opencv_cudalegacy.dir/build.make:2964: recipe for target 'modules/cuda

参考链接:https://blog.csdn.net/Dillon2015/article/details/79250169

(3) undefined reference to `TIFFReadDirectory@LIBTIFF_4.0’ ; 或者 undefined reference to ‘jas_image_writecmpt’

TIFFRead问题解决方法有如下:
方法1. 链接link

方法2. 由于之前存在ROS的缘故,所以需要卸载重新安装TIFF:链接:link
简单来说就是使用以下两条指令:
sudo apt-get autoremove libtiff5-dev
sudo apt-get install libtiff5-dev

方法3. anaconda3的路径问题,请前往文章开头,寻找anaconda3的路径并注释掉就不会出现一长串的undefined reference to的问题了。

4. sudo install make 出现的错误

sudo install make 后可能还会出现错误:/libopencv_imgcodecs.so.3.1.0 undefined reference to `png_set_longjmp_fn’,此时link.txt已经上锁,需要用管理员权限打开
则通过指令:
sudo nautilus
用管理员权限打开文件夹,安装3中(1)修改link.txt文件即可,再次运行sudo install make,将会[100%]

5. 只能python2调用Opencv,python不可以的问题

参考链接:link

你可能感兴趣的:(深度学习)