最近想在linux环境下使用opencv作图像处理工作。之前写过一篇Windows下visual studio 2019下配置opencv4.3.0。今天来试试在Linux ubuntu 20.04的系统下编译opencv。
首先opencv官网中并没有linux下的编译好的包,因此需要下载源码进行编译。
-
下载源码:源码地址在opencv官网中可以找到,我这里用的是最新版的4.4.0. 官网地址:
,具体操作如下两张图:
源码下载至一个指定文件夹,以/home/opencv为例,将opencv-4.4.0.zip压缩包解压掉:
unzip opencv-4.4.0.zip
解压完成后会得到一个opencv-4.4.0的文件夹。完成这一步之后,就是要去安装一些基本的依赖文件,opencv之所以能做图像处理,就是因为opencv可以处理像png,jpeg,gif等文件,所以在使用opencv时,必须要确保我们的Linux系统上有相应的依赖供opencv使用。其安装指令如下:
sudo apt-get install build-essential
sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavformat-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff4-dev
sudo apt-get install libswscale-dev
sudo apt-get install libpng-dev
sudo apt-get install libjasper-dev
到目前为止,可能用到的图像的格式已经全部安装完毕了。这里值得一提的是,上面的所有更新完全的可用一条指令完成,但是要是不熟悉linux的童鞋还是分开来执行吧。另外一个问题就是,在执行
sudo apt-get install libjasper-dev
这条指令时可能会遇到libjasper-dev包无法定位的问题,遇到这个问题后需要更新一下Linux的几个配置即可,执行如下指令:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
该指令完成后,再次执行
sudo apt-get install libjasper-dev
这个指令即可完成安装。
以上依赖全都完成后,在终端中进入opencv-4.4.0这个解压缩后的文件夹。然后新建一个编译的目标文件夹并进入,这里以build文件夹为例。终端执行如下指令:
mkdir build #新建一个build文件夹
cd build #进入build文件夹
在该文件夹中执行默认的cmake编译即可,即:
cmake ..
执行上述指令后,系统会自动的到父类文件夹下去寻找可供编译的文件。当然,如果你是第一次使用cmake编译文件,你可能会遇到以下问题。
这个问题出现的原因就是你的linux并没有安装cmake,只需要安装一下即可。
sudo apt-get install cmake
cmake完成以后再看一下你的build文件夹,就会发现出现了很多的新文件。完成之后就到最后一步了——通过makefile编译opencv,只需执行指令。
make
到这里为止就大功告成了,接下来就是静静的等待opencv的编译了。这一过程大概要持续半个小时左右,这个时间去喝杯咖啡回来就差不多啦。
编译跑到100%后,再执行以下指令:
sudo make install
这些都配置完成之后需要修改配置一下环境变量
(以下环境变量的配置全都需要在root权限下进行)
。
echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf
vim /etc/bash.bashrc
执行上述的vim指令后会打开bash.bashrc文件,在文件的末尾两行加上
PKG_CONFIG=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存后退出,执行指令:
ldconfig -p | grep opencv
该指令执行完成后会显示出所有的opencv动态库则表示opencv配置成功,如下图:
接下来就可以愉快的敲代码了,下面是显示一张照片的代码案例:
#include<opencv2/opencv.hpp>
using namespace cv;
int main(){
Mat img = imread("./zhiyezhao.png");
imshow("我的职业照". img);
waitKey(0);
return 0;
}
showPhoto.cpp
接下来就是编译执行了,在终端中执行
g++ -o main showPhoto.cpp `pkg-config opencv4 --cflags --libs`
./main
当然,为了怕你们自卑,帅气的职业照是不能让你们看到的,所以显示结果就不放上去了(😂)。