说在前面
- ubuntu版本:16.0.4
- python:3.6
- opencv:4.1.1
安装python3.6
- 参考这里
然后你会发现/usr/bin 中有3个版本的python。sudo add-apt-repository ppa:jonathonf/python-3.6 sudo apt-get update sudo apt-get install python3.6
然后修改一下软链接,让python、python3的版本都改为3.6python -V #结果是python2.7 python2 -V #结果是python2.7 python3 -V #结果是python3.5
(为什么改python3?不然后面使用pip安装各种包的时候会装在3.5里;注:这部分还是自己尝试一下,用pip安装一个包试试,只要装在你自己要用的那个版本就行,目录应该是/usr/local/lib/pythonx.x/dist-packages)cd /usr/bin sudo rm python sudo rm python3 sudo ln -s python python3.6m sudo ln -s python3 python3.6m
最后使用python -V查看一下版本。
注意:更换python默认版本后系统某些功能可能会出问题,例如add-apt-repository就不能用了,貌似这个默认用的是3.5的,并且只有3.5可以安全使用。
安装pip3
- 参考这里
但是装完后pip3没有,只有个最新版本的pip
不过,当使用pip进行实验后,发现安装的包放在python3.6下,那就没问题啦。pip install yapf
安装VSCode
- 官网下载安装(.deb文件,通过ubuntu软件安装)
- 配置vscode
修改settings.json
中文{ "workbench.iconTheme": "vscode-icons", "python.pythonPath": "/usr/bin/python3.6" }
ctrl+shift+p,输入configure display language,选择添加
安装中文简体
- 测试
- 新建文件夹
- 使用vscode打开文件夹
- 创建 main.py
- 编写代码
def hello(): print("HelloWorld") if __name__ == '__main__': hello()
- F5进行调试
安装OpenCV
-
安装预编译版本
如果只使用opencv的主要功能,建议直接安装预编译版本,根据opencv官网的教程。sudo apt-get install python-opencv
然后在python文件中使用即可
import cv2 as cv print(cv.__version__)
多简单,多舒服~~~,但是有些功能你用不了!!!
-
自己编译
(又要编译吗???)
如果你需要使用以下功能,那么就得从源码编译
编译过程参考官方教程
编译依赖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
下载源码(这样下载的都是最新版本的opencv,而且git速度给劲)
sudo apt-get install git # 或者使用gitee https://gitee.com/mirrors/opencv.git git clone https://github.com/opencv/opencv.git # https://gitee.com/mirrors/opencv_contrib.git git clone https://github.com/opencv/opencv_contrib.git
目录结构
然后cd opencv mkdir build cd build
最终的Cmake命令如下:
sudo cmake \ -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules ~/opencv/opencv \ -D PYTHON_DEFAULT_EXCUTABLE=/usr/bin/python3 \ -D BUILD_opencv_python3=ON \ -D BUILD_opencv_python2=OFF \ -D PYTHON3_EXCUTABLE=/usr/bin/python3 \ -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \ -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \ -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.6/dist-packages/numpy/core/include \ -D WITH_TBB=ON \ -D WITH_EIGEN=ON \ -D WITH_OPENGL=ON \ -D OPENCV_ENABLE_NONFREE=ON \ -D CMAKE_C_COMPILER=/usr/bin/gcc-5 ..
解释如下:
-D CMAKE_BUILD_TYPE=RELEASE #release版本 -D CMAKE_INSTALL_PREFIX=/usr/local #安装的路径 -D OPENCV_EXTRA_MODULES_PATH=~/opencv/opencv_contrib/modules ~/opencv/opencv \ #contrib模块路径 -D PYTHON_DEFAULT_EXCUTABLE=/usr/bin/python3 \ #python默认路径 -D BUILD_opencv_python3=ON \ #打开python3 -D BUILD_opencv_python2=OFF \ #关闭python2 -D PYTHON3_EXCUTABLE=/usr/bin/python3 \ #python3路径 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m \ #include路径 -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so \ #lib路径 -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/local/lib/python3.6/dist-packages/numpy/core/include \ #numpy路径,先使用sudo pip install numpy -D WITH_TBB=ON \ #不管 -D WITH_EIGEN=ON \ #不管 -D WITH_OPENGL=ON \ #内置opengl -D OPENCV_ENABLE_NONFREE=ON \ #允许nonfree的模块 -D CMAKE_C_COMPILER=/usr/bin/gcc-5 #使用gcc5编译,加上,不然出错
注意:若出现找不到videoio.h的错误,请在/usr/include文件夹中创建目录sys,进入该目录创建空文件videoio.h
最后sudo make -j4 sudo make install
测试
import cv2 as cv def hello(): print("HelloWorld") if __name__ == '__main__': hello() print(cv.__version__)
试一下xfeature2dfrom __future__ import print_function import cv2 as cv import numpy as np src = cv.imread('timg.jpeg', cv.IMREAD_GRAYSCALE) if src is None: print('Could not open or find the image') exit(0) # -- Step 1: Detect the keypoints using SURF Detector minHessian = 400 detector = cv.xfeatures2d_SURF.create(hessianThreshold=minHessian) keypoints = detector.detect(src) # -- Draw keypoints img_keypoints = np.empty((src.shape[0], src.shape[1], 3), dtype=np.uint8) cv.drawKeypoints(src, keypoints, img_keypoints) # -- Show detected (drawn) keypoints cv.imshow('SURF Keypoints', img_keypoints) cv.waitKey()
然后build可以删了
坑
-
python
- 更改默认版本导致add-apt-repository不可用
要用的时候换回3.5,hhhh
- 更改默认版本导致add-apt-repository不可用
-
opencv
- 找不到python.h
(fatal error: Python.h: 没有那个文件或目录)
这里我们使用的是python3.6,因此sudo apt-get install python3.6-dev
- 找不到videoio.h
在/usr/include创建文件夹sys,进入并创建空文件videoio.h - ‘command line option .* is valid for .* but not for C++’
-D CMAKE_C_COMPILER=/usr/bin/gcc-5
- 找不到python.h
to be continued…