更新:
听说大家OpenCV 的安装过程出现很多我这篇博客并没有列举的坑,所以为了一探究竟,我重新用另一块树莓派安装了一次OpenCV,特此记录并对博客作出一些修改。
首先把准备工作做好,先确保已经更换好源:树莓派换源
首先说说配置:我的树莓派是2018年11月份买的,系统是2018-11-13-raspbian-stretch
附上:树莓派系统下载地址
本文代码均可直接复制进shell
sudo apt-get update
sudo apt-get upgrade
固件较新或Ubuntu 则可忽略此步:
sudo rpi-update
sudo apt-get install build-essential cmake git pkg-config
其中包括build-essential、cmake、git和pkg-config
jpeg格式图像工具包:
sudo apt-get install libjpeg8-dev
tif格式图像工具包:
sudo apt-get install libtiff5-dev
jpeg-2000图像工具包:
sudo apt-get install libjasper-dev
png图像工具包:
sudo apt-get install libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libatlas-base-dev gfortran
至此,OpenCV 依赖包已经全部安装完成。
使用wget工具下载OpenCV 压缩包到用户目录下:
wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
解压OpenCV:
unzip opencv-3.4.1.zip
下载OpenCV_contrib库:
wget -O opencv_contrib-3.4.1.zip https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
解压OpenCV_contrib库:
unzip opencv_contrib-3.4.1.zip
cd opencv-3.4.1
mkdir release
cd release
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.4.1/modules \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D BUILD_EXAMPLES=ON ..
其中参数简介:
参数 | 作用 |
---|---|
CMAKE_BUILD_TYPE=RELEASE | 编译方式 |
CMAKE_INSTALL_PREFIX | 安装目录 |
OPENCV_EXTRA_MODULES_PATH | 加载额外模块 |
INSTALL_PYTHON_EXAMPLES | 安装官方python例程 |
BUILD_EXAMPLES | 编译例程 |
此过程极为漫长,我一共编译了4个小时!!!
sudo make
sudo make install
sudo ldconfig
下面就来利用一个简单的Python 程序检验一下OpenCV 是否正常工作
# --coding:utf-8--
import cv2
import numpy as np
cv2.namedWindow("gray")
img = np.zeros((512,512),np.uint8) #生成一张空的灰度图像
cv2.line(img,(0,0),(511,511),255,5) #绘制一条白色直线
cv2.imshow("gray",img) #显示图像
while True: #循环等待,按q键退出
key=cv2.waitKey(1)
if key==ord("q"):
break
cv2.destoryWindow("gray")
若OpenCV 正常工作,则屏幕显示一条白色斜线:
最后说一句,在此我极度建议大家备份一下,不然花了那么长时间安装好,万一出了点差错,TF卡坏了,那真是…哔了狗了
若上述第一个坑处不能正常编译,试着把后面3个参数去掉,即:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
这里出问题了,一定要仔细看错误信息,找出来Error 到底是什么。
这里就出现了一个因为源码问题而不能正常进行下去的错误:
error: invalid conversion from 'const char*' to 'char*'
解决办法在此:https://bugs.gentoo.org/691480
即找到错误信息中提到的文件并打开,然后修改:
if(!obj || obj == Py_None)
return true;
- char* str = PyString_AsString(obj);
+ const char* str = PyString_AsString(obj);
if(!str)
return false;
value = String(str);
去掉char* str = PyString_AsString(obj);
,加上const char* str = PyString_AsString(obj);
最后,若遇上什么问题,可以看看这里有没有解决方案:
https://bugs.gentoo.org/691480
http://cn.waterlin.org/CVCG/OpenCV-installation-error.html
https://www.jianshu.com/p/259a6140da9d
https://github.com/opencv/opencv/issues/12957