ubuntu 20.04下编译供C++/python使用的opencv

  • Post author:
  • Post category:python


最近想在linux环境下使用opencv作图像处理工作。之前写过一篇Windows下visual studio 2019下配置opencv4.3.0。今天来试试在Linux ubuntu 20.04的系统下编译opencv。

首先opencv官网中并没有linux下的编译好的包,因此需要下载源码进行编译。

  1. 下载源码:源码地址在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

当然,为了怕你们自卑,帅气的职业照是不能让你们看到的,所以显示结果就不放上去了(😂)。



版权声明:本文为WJ_SHI原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。