视觉教程第五弹:OpenCV安装教程
机械是血肉,电控是大脑,视觉是灵魂。
一、安装环境
- Ubuntu系统版本:18.04 LTS
- OpenCV版本:4.4.0
- OpenCV_contrib版本:4.4.0
以上内容通过官网下载可能会非常缓慢,所以我们提供了百度网盘下载地址:链接: https://pan.baidu.com/s/1dxP-EFLLgXgZFc-NFhK6ng 密码: r3ip ,以及交大jbox链接:https://jbox.sjtu.edu.cn/l/5odMzG。
注:百度网盘中还有face_landmark_model.dat
文件,是OpenCV编译安装过程中可能需要问题的问题,后续步骤中会相应提及。
二、前言
配置环境是做项目的第一步,也是非常重要的一步,如果你希培养的自己的这种能力,我们非常鼓励你先自己探索整个安装步骤,并给出你可控需要查阅资料用到的关键词:Linux
、OpenCV和OpenCV_contirb库编译
、cmake编译
,以及可能出现的问题:权限不足
、文件不存在
、文件下载失败
等,对应的问题一般只需要把关键的句子复制到搜索引擎就会出现答案,大部分问题在CSDN中都有解答,少部分问题需要查阅Overstackflow查看英文解决方法,查阅官网资料和论坛也是一种不错的方法。
三、OpenCV安装详细步骤
准备阶段
首先,你需要拥有一个LInux主机,一般来说我们的电脑都是Windows和MacOS为操作系统的。这时候有两种方法可以解决这一问题,一个是安装双系统,一个是配置虚拟机。这一部分网上都有非常详细的教程,大家可以自己搜索。需要提到的一点是,如果你的主机性能良好,那么这两个方案都是可选的,如果它的性能不足以同时运行两个系统,那么安装双系统是比较合理的选择。一般我们配置的Linux虚拟机至少需要分配1核、2GB才能够运行起来,如果要运行比较耗资源的项目的话,2核4GB是可能的选择,这意味着你的电脑最好具备4核8GB才选择安装双系统,并且这个配置还与你电脑的CPU型号和内存条型号有关。笔者的CPU和内存型号分别为i7和DDR4,仅供参考。
如果你选择了双系统,那么请提前规划好你的硬盘容量,因为双系统会在安装时固定死系统容量,并且不能更改。如果你选择了虚拟机,那么你需要一个底层的支撑软件,比如VM、Parallel Desktop等,前者作为交大的学生可以在网络信息服务中心申请免费使用。
安装完虚拟机之后,就可以正式进入安装OpenCV的环节了。当然在这之前,我们需要确保系统安装了一些最基本的依赖库,以免后续出现问题。请打开终端输入一下命令:
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
如果最后一条命令出现报错:“E: 无法定位软件包 libjasper-dev”,那么将这条命令分解为一下两步:
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
安装cmake和cmake-gui(必须):
sudo apt install cmake
sudo apt-get install cmake-qt-gui
安装Boost和Eigen(非必须,以后的项目会用到):
sudo apt install libboost-all-dev
sudo apt-get install libeigen3-dev
当然还有一些其他的Ubuntu的配置,比如下载中文输入法等等,这些有需要的自己查资料配置。
OpenCV和OpenCV_contrib库
在配置完系统后,我们终于可以配置OpenCV了。
先到github下载最新的opencv和opencv_contrib库(此链接为4.4.0),进入github搜索opencv,点击master下拉按钮->Tags->需要的版本数,点击Code按钮,复制ssh网址,使用git clone
命令下载,当然直接下载ZIP也是可以的。对于git的使用教程请查看这篇教程(TODO)。如果网络较差,我们在文章开头也提供了百度网盘下载地址。下载完的两个zip文件手动解压到某个地方,比如Downloads。
然后将opencv...
的文件夹重命名为opencv
,并移动到/home/
文件夹下,opencv_contrib...
的文件夹重命名为opencv_contrib
,并移动到opencv
文件夹下,并在opencv
文件夹下新建build
文件夹。
打开终端,输入cmake-gui
,然后使用cmake-gui编译,设置好源路径(/home/用户名/opencv)和目的路径(/home/用户名/opencv)后,其中用户名点击电脑右上角第四行字就是,点击Configure,然后点击finish。然后我们需要更改两个地方:
- 在CMAKE_BUILD_TYPE 值处输入RELEASE(若本身为Release则不用更改;这里说明一下,CMAKE_INSTALL_PREFIX为安装路径,系统默认为/usr/local,如若对ubuntu不熟悉,则不要更改,默认就好)。
- 在OPENCV_EXTRA_MODULES_PATH处加入opencv_contrib路径。注意,不是选opencv_contrib文件夹,而是需要选中opencv_contrib里面的modules文件夹!
确认无误后,点击Configure;显示Configuring done后,点击Generate生成文件;这时资源文件就出现在build文件夹中,我们可以关闭cmake了。
在编译之前,先排除两个可能的问题:
- IPPCV下载过慢:笔者没有遇到这个问题,可以查看这篇教程。
- face_landmark_model.dat下载过慢:手动下载face_landmark_model.dat,存放在Downloads文件夹里,修改相应的配置文件
gedit /home/用户名/opencv/opencv_contrib/modules/face/CMakeLists.txt
,其中用户名换成自己的用户名,将CMakeLists.txt文件的第19行修改为本地路径,即将原来的网址修改为下载的文件保存的路径,"/home/用户名/Downloads/"
,原来的内容是*"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${__commit_hash}/"*
。
在opencv/build文件夹中打开终端,输入指令sudo make
编译(这一步需要花费的时间较长)。100%后,继续输入指令sudo make install
安装(这一步需要花费的时间也较长)。
至此OpenCV编译过程就结束了
配置环境
接下来就需要配置一些OpenCV的编译环境首先将OpenCV的库添加到路径,从而可以让系统找到。
sudo gedit /etc/ld.so.conf.d/opencv.conf
在文件中添加一下内容,然后保存关闭,提示的错误不用管它。
/usr/local/lib
执行命令,使配置路径生效
sudo ldconfig
配置bash
sudo gedit /etc/bash.bashrc
在文件最后加入两行,然后保存。
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
执行命令,使配置路径生效
source /etc/bash.bashrc
更新系统路径
sudo updatedb
到此位置,我们的opencv+opencv_contrib配置完成,已经可以调用opencv库函数了。
四、Clion安装
见百度网盘中安装包,解压后有安装教程。
Clion和Pycharm的安装教程在对应的安装包中都有提供,这里给出申请学生免费账号的方法。
首先进入官方申请网站,选择For students and teachers下的 learn more,用自己的学校邮箱申请,然后打开邮箱内的确认邮件。然后创建自己的JetBrains Account,在软件安装完之后的activate过程中输入账号密码就可以使用了。
五、Clion中配置cmake-gui
用以下实例代码检测是否配置成功,在项目文件夹中放置一张ai.jpg
图片:
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(ocv)
set(CMAKE_CXX_STANDARD 11)
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(ocv main.cpp)
target_link_libraries( ocv ${OpenCV_LIBS} )
main.cpp
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
int main() {
Mat myMat= imread("../ai.jpg");
namedWindow("img");
imshow("img",myMat);
waitKey();
std::cout << "Hello, World!" << std::endl;
return 0;
}
作者:黄弘骏,github主页:传送门。
写在最后
如果你看完了以上的教程,并进行了实践,然而失败了,那么你可以选择直接使用我们配置好的虚拟机。 这是配置好的虚拟机链接。
虚拟机信息:
- 虚拟机平台:VMware Workspace 16 Pro
- 操作系统: Ubuntu20.04
- 已安装环境:
- OpenCV
- Eigen
- Ceres
- fmt
配置者:冯临溪