本文介绍了如何在树莓派上分别安装Python2和Python3的OpenCV
安装Python3的OpenCV时需要编译,会覆盖Python2版本的
提前准备
换源
安装运行在Python2上的OpenCV
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv
验证
python
>>import cv2
>>cv2.__version__
安装运行在Python3上的OpenCV
安装numpy
sudo pip3 install numpy
安装OpenCV依赖
sudo apt-get install build-essential git cmake pkg-config -y
sudo apt-get install libjpeg8-dev -y
sudo apt-get install libtiff5-dev -y
sudo apt-get install libjasper-dev -y
sudo apt-get install libpng12-dev -y
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
sudo apt-get install libgtk2.0-dev -y
sudo apt-get install libatlas-base-dev gfortran -y
//有冲突的可以用aptitude指令安装
下载并解压OpenCV
下载
wget https://github.com/Itseez/opencv/archive/3.4.0.zip
wget https://github.com/Itseez/opencv_contrib/archive/3.4.0.zip
//子豪提供的百度网盘 https://pan.baidu.com/s/182NYJzW1nCpnQ7ftSYYuSw
解压
cd /home/pi/Downloads 文件目录
unzip opencv-3.4.0.zip
unzip opencv_contrib-3.4.0.zip
设置参数
cd ./opencv-3.4.0
mkdir build
cd ./build
//执行下面一大行命令(这一步最关键,路径可能要自己修改)
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=/root/opencv_contrib-3.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_LIBV4L=ON PYTHON3_EXECUTABLE=/usr/bin/python3.5 PYTHON_INCLUDE_DIR=/usr/include/python3.5 PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include/ ..
运行要5min左右,如果提示没有error,都是done那就就成功了,报错的原因就是路径出了问题
重点检查OPENCV_EXTRA_MODULES_PATH 和PYTHON2(3)_NUMPY_INCLUDE_DIRS = /usr/lib/python<version>/dist-packages/numpy/core/include/ NUMPY所在位置
编译
cd /root/opencv-3.4.0/build
sudo make
//编译可能要几个小时
- DEBUG
错误一:缺少boostdesc_bgm.i文件
解决方案:手动下载添加
下载 https://pan.baidu.com/share/init?surl=SmRMg_aydPYOJ1jKNjGZPw 提取码:z7dp
文件解压拷贝到opencv_contrib/modules/xfeatures2d/src/目录下
错误二:提示在“opencv2/opencv2/xfeatures2d.hpp”中不存在该文件,但是该文件实际是存在的:
解决方案:修改提示中的xfeature2d.hpp文件
根据给的路径找到xfeature2d.hpp的文件并打开,找到第42行如下:
#include"/opencv2/xfeatures2d.hpp"
修改为绝对路径
例:#include"/usr/local/arm/opencv3.4.0/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp"
错误三:编译过程中内存满,死机
解决方案:在/opt/image中添加一个2G的swap交换文件 //大量交换可能会损坏 SD卡
sudo mkdir /opt/image
cd /opt/image
sudo touch swap
sudo dd if=/dev/zero of=/opt/image/swap bs=1024 count=2048000 //添加交换文件并设置其大小为2G,这一步慢的一批
sudo mkswap /opt/image/swap //创建(设置)交换空间,使用命令mkswap
free -m //检查现有的交换空间大小
sudo swapon /opt/image/swap //启动新增加的2G的交换空间
free -m //检查现有的交换空间大小
sudo vim /etc/fstab //修改/etc/fstab文件,使得新加的2G交换空间在系统重新启动后自动生效
在文件最后加入
/opt/image/swap /swap swap defaults 0 0
重启
错误四:编译过程中存储空间不足
解决方案:利用raspi-config扩大文件系统到整个SD卡
sudo raspi-config
Advanced Options
Expand Filesystem
错误五:提示 make: *** [Makefile:163:all] 错误 2 etc
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/build.make:63:modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:21633:modules/python3/CMakeFiles/opencv_python3.dir/all] 错误 2
make: *** [Makefile:163:all] 错误 2
解决方案:
nano /root/opencv-3.4.0/modules/python/src2/cv2.cpp
将其中885,1555,1591,1592,1634行的 char*= 改成 const char*=
- 编译完后还要执行一下
sudo make install
测试
python3
>>import cv2
>>cv2.__version__
内存吃紧的可以把编译目录删了
rm -rf /root/opencv-3.4.0/build
补充说明
"cv"版本的API是C语言开发的
"cv2"版本的API是基于C++语言开发的
为了保持向后兼容性所以叫"cv2"
我们都知道"cv2"就是OpenCV本尊
配置官方的摄像头Picamera
用nano编辑modules这个文件
sudo nano /etc/modules
//在末尾添加一行
bcm2835-v4l2
检测
//输入命令
vcgencmd get_camera
//输出下面代码即为正常
supported=1 detected=1
实例(把摄像头捕捉到的画面显示在桌面弹窗上)
git clone https://github.com/TommyZihao/opencvtest.git
cd opencvtest
python2 testopencv.py