ubuntu16.04安装opencv3.4.1及卸载,以及opencv与anaconda相关问题,import cv2,no module named cv2填坑指南

Posted jlqzzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu16.04安装opencv3.4.1及卸载,以及opencv与anaconda相关问题,import cv2,no module named cv2填坑指南相关的知识,希望对你有一定的参考价值。

1.去官网下载opencv,在本教程中选用的时opencv3.4.1,其他版本的配置方法异曲同工。
下载,选择sources版本.

2.解压下载下来的zip包

unzip opencv-3.4.1.zip

3.进入到解压后的文件包中

4.安装依赖库和cmake ,如果提醒需要apt-get update,那就先sudo su进入root权限,再sudo apt-get update,然后在执行下面命令

sudo apt-get install cmake  
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev  
  •  

5.安装完cmake之后执行命令 ,创建编译文件夹

mkdir my_build_dir
cd my_build_dir

 

6.cmake一下

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
  •  

注意:如果已经在新的文件夹中编译,但是还会出现之前的报错,把cmakecache.txt删了再编译就可

期间可能会下载一个东西,等待一会儿就OK

7.执行命令,漫长的编译过程(用nproc命令查看自己的线程数,我的是12线程,用sudo make -j12会快很多喔)

sudo make
  •  

8.执行命令

sudo make install
  •  

9.sudo make install 执行完毕后OpenCV编译过程就结束了,接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到

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

执行此命令后打开的可能是一个空白的文件,不用管,只需要在文件末尾添加

/usr/local/lib  
  •  

10.执行如下命令使得刚才的配置路径生效

sudo ldconfig  
  •  

这个时候可能会提示错误如下图所示(上部分)

sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符号连接
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符号连接
出现这个错误可能是由于系统BUG所致

只需要分别输入上面图下部分的四行命令就可解决
sudo mv /usr/lib/nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

11.配置bash

sudo gedit /etc/bash.bashrc  
  •  

在最末尾添加

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH  
  •  

保存,执行如下命令使得配置生效

source /etc/bash.bashrc  
  •  

更新

sudo updatedb  
  •  

12.至此所有的配置都已经完成
下面用一个小程序测试一下

找到
cd到opencv-3.4.1/samples/cpp/example_cmake目录下
我们可以看到这个目录里官方已经给出了一个cmake的example我们可以拿来测试下
按顺序执行

cmake .
make
./opencv_example
  •  

即可看到打开了摄像头,在左上角有一个hello opencv
即表示配置成功

ubuntu下卸载opencv

 

在ubuntu下删除opencv的步骤如下:

1)进入opencv的源代码文件夹下的release(这是你在安装opencv时候自己命名的,cmake时候所在的目录)

2)依次执行下面的代码

  1. make uninstall

  2. cd ..

  3. sudo rm -r release

  4. sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv

  5. 或者说是cd /home/hy/opencv/build make uninstall//卸载掉配置路径中的文件 sudo rm -r build//删除build文件 //删除掉环境中有关的其余包 sudo rm -r /usr/local/include/opencv2 /usr/local/include/opencv /usr/include/opencv /usr/include/opencv2 /usr/local/share/opencv /usr/local/share/OpenCV /usr/share/opencv /usr/share/OpenCV /usr/local/bin/opencv* /usr/local/lib/libopencv* cd /home/hy chmod a+x opencv//给opencv权限 rm -r opencv//如果删除还是有文件权限不够,可以继续给相应文件权限,chomd a+x 文件名

opencv与anaconda相关问题,import cv2,no module named cv2填坑指南

ubuntu16.04系统自带python2和python3。直接命令行中,python,python3就可以使用并查看相应版本。

但我们一般也会装anaconda集成包,因为他包含了python以及相关安装包。使用起来比较方便。

但是从源码安装编译opencv时却因为anaconda这个包的存在埋了不少坑。

本人之前先在系统自带python的基础上又安装了anaconda3,并将anaconda3中的python3.6加入到系统路径中,这样系统就会一直调用anaconda3中python3.6.

然后再从源码安装编译opencv3.4.0,这时候会出现一个问题。编译时要生成python可以调用的cv2.so,需要调用python编译器,但此时opencv源码中的cmakelist懵了,不知道用系统自带还是anaconda中的python,干脆就放弃了编译生成这个python接口可调用的cv2.so文件。所以此时无论在系统python环境下还是anaconda python环境下都不能import cv2.

当然有些人可能为了继续在anaconda中import cv2投机取巧用conda安装阉割版的opencv-python,但请原谅我是个完美主义者,不想用这种方式糊弄我自己,我会寝食难安0.0,哈哈,just for fun!(sorry!)

想要用完整版的opencv,有两种解决方式:

一种是修改opencv的cmake编译选项,指明编译时使用的python编译器为anaconda python。

 

cmake -D WITH_IPP=OFF -D PYTHON_DEFAULT_EXECUTABLE=~/anaconda3/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=~/anaconda3/bin/python3 -D PYTHON3_INCLUDE_DIR=~/anaconda3/include/python3.6m -D PYTHON3_LIBRARY=~/anaconda3/lib/libpython3.6m.so.1.0 -D PYTHON_NUMPY_PATH=~/anaconda3/lib/python3.6/site-packages ..

下载opencv并解压,在解压后的文件夹中:

 
  1. mkdir build #新建一个build文件夹,编译的工程都在这个文件夹里

  2. cd build

  3. cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -DCUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D BUILD_NEW_PYTHON_SUPPORT=ON -D PYTHON_EXECUTABLE=/path/to/anaconda3/bin/python3 -DPYTHON_INCLUDE_DIR=/path/to/anaconda3/include/python3.6m -DPYTHON_LIBRARY=/path/to/anaconda3/lib/libpython3.6m.so -DPYTHON_NUMPY_INCLUDE_DIRS=/path/to/anaconda3/lib/python3.6/site-packages/numpy/core/include ..

     注意把PYTHON_EXECUTABLE,PYTHON_INCLUDE_DIR,PYTHON_LIBRARY,PYTHON_NUMPY_INCLUDE_DIRS中的目录换成自己安装的anaconda的目录。

第二种是将annaconda系统路径屏蔽(当然最好是一开始就先装opencv,这样系统自动用系统自带python进行编译,等生成了cv2.so再安装anaconda)。

使用系统自带的python2和python3编译分别会生成cv2.so和cv2.cpython-35m-x86_64-linux-gnu.so这就是我们分别在anaconda2和anaconda3中import的cv2模块。

因为我的是anaconda3,所以首先进入到~/opencv-3.4.0/my_build_dir/lib/python3目录下将其中的cv2.cpython-35m-x86_64-linux-gnu.so复制到anaconda下。(如果是anaconda2就直接将cv2.so复制进去就可以了)

sudo cp cv2.cpython-35m-x86_64-linux-gnu.so /home/zya/anaconda3/lib/python3.6/site-packages/

然后改名sudo mv cv2.cpython-35m-x86_64-linux-gnu.so cv2.so

当然你不愿意复制也可以使用建立软链接的方式

ln -s /usr/local/lib/python3.6/site-packages/cv2.cpython-36m-x86_64-linux-gnu.so /anaconda3/lib/python3.6/site-packages/cv2.so

然后问题完美解决了!

 

以上是关于ubuntu16.04安装opencv3.4.1及卸载,以及opencv与anaconda相关问题,import cv2,no module named cv2填坑指南的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu16.04安装opencv3.4.1教程

Ubuntu16.04安装Opencv3.4.1教程

Ubuntu 16.04 安装 Leptonica 1.75.3

Ubuntu16.04下安装opencv-3.4.1

Linux ubuntu16.04 安装opencv4教程(源码编译)

在ubuntu18.04一键安装opencv3.4.1的脚本