一、安装OpenCV 依赖包:
1. 更新软件源 + 升级安装包 + 升级固件
sudo apt-get update
sudo apt-get upgrade
固件较新或Ubuntu 则可忽略此步:
sudo rpi-update
2. 安装构建OpenCV 相关的工具
sudo apt-get install build-essential cmake git pkg-config -y
其中包括build-essential、cmake、git和pkg-config
3. 安装常用图像工具包
jpeg格式图像工具包:
sudo apt-get install libjpeg8-dev -y
tif格式图像工具包:
sudo apt-get install libtiff5-dev -y
jpeg-2000图像工具包:
sudo apt-get install libjasper-dev -y
png图像工具包:
sudo apt-get install libpng12-dev -y
4. 安装视频I/O包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev -y
5. 安装gtk2.0
sudo apt-get install libgtk2.0-dev -y
6. 优化函数包
sudo apt-get install libatlas-base-dev gfortran -y
至此,OpenCV 依赖包已经全部安装完成。
二、编译OpenCV源代码的准备工作:
1. 下载OpenCV
使用wget工具下载OpenCV 压缩包到用户目录下(从国内镜像源下载):
wget https://www.bzblog.online/opencv/opencv-4.5.1/opencv-4.5.1.zip
附OpenCV国内镜像源链接:https://www.bzblog.online/opencv/
如果想从GitHub下载,可将上述链接更换为https://github.com/Itseez/opencv/archive/3.4.1.zip
解压OpenCV:
unzip opencv-4.5.1.zip
注意:OpenCV_contrib版本应与所下载OpenCV版本一致。
下载OpenCV_contrib库(也是国内镜像源):
wget https://www.bzblog.online/opencv/opencv_contrib/opencv_contrib-4.5.1.zip
同样附上opencv_contrib官网链接:https://github.com/Itseez/opencv_contrib/archive/3.4.1.zip
解压OpenCV_contrib库:
unzip opencv_contrib-4.5.1.zip
2. 进入解压后的OpenCV 源码文件夹
cd opencv-4.5.1
3. 新建一个名为release的文件夹用来存放cmake编译时产生的临时文件
mkdir release
cd release
4. 配置cmake编译参数
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.5.1/modules ..
其中参数简介:
参数 | 作用 |
---|---|
CMAKE_BUILD_TYPE=RELEASE | 编译方式 |
CMAKE_INSTALL_PREFIX | 安装目录 |
OPENCV_EXTRA_MODULES_PATH | 加载额外模块 |
INSTALL_PYTHON_EXAMPLES | 安装官方python例程 |
BUILD_EXAMPLES | 编译例程 |
① 此处可能出现的第一个问题
若不能正常编译,试着把最后那个参数去掉,即:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
若遇上什么问题,可以看看这里有没有解决方案:
https://bugs.gentoo.org/691480
https://www.jianshu.com/p/259a6140da9d
https://github.com/opencv/opencv/issues/12957
② 此处可能出现的第二个问题
若此处配置失败,如下图:
可试着将release目录删除,重新配置:
配置成功:
三、正式开始编译:
1. 编译
此过程极为漫长,我一共编译了4个小时!!!
sudo make
① 此处可能出现的第一个问题(源码错误)
出问题后,大家一定要仔细看错误信息,找出来Error 到底是什么。
这里就出现了一个因为源码问题而不能正常进行下去的错误:
error: invalid conversion from 'const char*' to 'char*'
解决办法就是修改源码:
- 进入
/home/pi/opencv-3.4.1/modules/python/src2
找到cv2.cpp
; - 去到第大概889行,找到下文所示代码并进行修改:
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);
注意:实测过程证明,即使错误提示不是上述error 也可能可以通过该方法进行修复。
② 此处可能出现的第二个问题(缺少文件)
提示说opencv_contrib缺少boostdesc_bgm.i等文件
。
我们可以将这个boostdesc_bgm.i.zip压缩包里面的东西全部复制进opencv_contrib/modules/xfeatures2d/src/
路径中
③ 此处可能出现的第三个问题(缺少文件)
说找不到 feature2d/test/test_detectors_regression.impl.hpp文件
。
其实这个文件是有的,只不过在opencv下的 modules
目录下:
opencv/modules/feature2d/test/test_detectors_regression.impl.hpp
所以我们需要在opencv/CMakeLists.txt
文件中添加这个路径信息。
打开opencv/CMakeLists.txt
文件,并在图示高亮代码下面添加:
include_directories("modules")
最后成功:
2. 安装
sudo make install
3. 更新动态链接库
sudo ldconfig
恭喜!您已成功安装OpenCV!
下面就来利用一个简单的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 正常工作,则屏幕显示一条白色斜线:
或者直接import cv2