基于ubuntu16.04和python3.5安装opencv3

话说opencv在linux下真是神装,各种bug时不时会出来给你个惊喜,让你爽一阵儿…刚来实验室的时候,听师兄说之前实验室有一个博士被opencv搞了一星期没搞好,气得退学了哈哈哈…开玩笑开玩笑咳咳,下面进入正文,主要操作来自于官网

1. 首先安装相关依赖:

sudo apt-get update
#downloading the required packages to compile OpenCV
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

2. 安装python3.5的dev包:

根据你所使用的python版本进行调整,比如你用的python3.6,则把下面涉及到python3.5的替换为python3.6即可。

sudo apt-get install python3.5-dev

3. 把python3.5的dev文件复制到相应位置:

如果你在使用python3.2及其以下版本,则跳过步骤3:

python3.5-config --includes

#输入以上命令,如果有以下输出(1),则继续执行下面紧接着的一条命令;但如果有以下输出(2),则掠过下面所谓复制命令:
#(1)-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m
#(2)-I/usr/include/python3.5m -I/usr/include/python3.5m

sudo cp /usr/include/x86_64-linux-gnu/python3.5m/pyconfig.h /usr/include/python3.5m/

4. 下载opencv源码包并编译安装:

mkdir OpenCV-tmp
cd OpenCV-tmp
git clone https://github.com/Itseez/opencv.git

接着把 /OpenCV-tmp 下的opencv文件夹名字改为opencv-3,并执行以下编译安装命令:

mkdir build & cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ../opencv-3
make -j $(nproc --all)
sudo make install

make -j12过程很慢!

5. make过程中出现以下"not found"错误:

/usr/bin/ld: warning: libpng16.so.16, needed by //home/xy/anaconda3/lib/libcairo.so.2, not found (try using -rpath or -rpath-link)

解决办法,然后重新编译即可:

cd /usr/lib/x86_64-linux-gnu
sudo ln -s ~/anaconda3/lib/libpng16.so.16 libpng16.so.16
sudo ldconfig

6. 验证安装:

python3   #进入python3环境,导入cv2模块,有以下输出
>>> import cv2
>>> cv2.__version__
'3.1.0-dev'

7. 附带安装python常用库:

sudo apt-get install python3-numpy
sudo apt-get install python3-matplotlib

8. 在python3环境下import cv2时候出现BUG:

nuc@xy:~$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /opt/ros/kinetic/lib/python2.7/dist-packages/cv2.so: undefined symbol: PyCObject_Type

方法1:在import cv2之前加入以下操作:

import sys
ros_path = '/opt/ros/kinetic/lib/python2.7/dist-packages'

if ros_path in sys.path:
   sys.path.remove(ros_path)
   
import cv2

sys.path.append('/opt/ros/kinetic/lib/python2.7/dist-packages')

方法2:该方法比较麻烦,一旦操作了ros即出问题

gedit ~/.bashrc
# 用注释掉有关ROS的source语句
#source /opt/ros/kinetic/setup.bash
source ~/.bashrc
打开一个新的终端,执行之前的方法即可

方法3:
给cv2.so换个名字

cd /opt/ros/kinetic/lib/python2.7/dist-packages/
sudo mv cv2.so cv2_ros.so

若此时依旧不能解决问题,出现以下ModuleNotFoundError: No module named ‘cv2’

nuc@xy:~$ python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> ros_path = '/opt/ros/kinetic/lib/python2.7/dist-packages'
>>> if ros_path in sys.path:
...  sys.path.remove(ros_path)
... 
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'cv2'

此时,你可能需要装两个东西:

sudo apt-get install python-opencv
pip install opencv-python

然后再import cv2试一下即可解决。

猜你喜欢

转载自blog.csdn.net/qq_42091428/article/details/106225363