环境
ubuntu16.04 + Opencv3.4.5 + Qt5.7.1
一 、安装QT
1、下载 qt-opensource-linux-x64-5.7.1.run ,下载地址在我的另一篇博客中介绍了,点击链接。
2、如果 qt-opensource-linux-x64-5.7.1.run 不能运行,没有执行权限,需要先给它赋值权限,然后再运行它:
sudo chmod u+x qt-opensource-linux-x64-5.7.1.run
./qt-opensource-linux-x64-5.7.1.run
注意:不可在访客用户下操作。 如果忘记管理员密码 ,可重新修改密码:
sudo passwd root
最后,按照安装提示,一步一步的完成安装。
3、创建一个空 qt 项目编译运行,如果遇到 "cannot find -lGL"以及无法安装libgl1-mesa-dev 错误:
需要下载openGL相关库,输入以下命令:
apt-get install libgl1-mesa-dev
4、如果下载了opencvGL相关库后,编译依然报这个错误,可以参考这个链接https://blog.csdn.net/qq_27278957/article/details/100054043 可以解决这个问题。
二、安装Opencv
1、下载
(1)从 opencv 官网下载 opencv3.4.5 的源码,opencv-3.4.5.zip;
(2)拷贝到ubuntu16.04系统中;
(3)解压 opencv-3.4.5.zip 。一般 ubuntu16.04 中自带 unzip 软件,解压命令:
unzip opencv-3.4.5.zip
如果没有安装 unzip 软件,可通过以下命令来安装:
sudo apt install unzip
2、安装编译环境和依赖包
(1)在解压后的 opencv-3.4.5 目录中创建 build 文件夹,并进入此文件夹:
mkdir build
cd build
(2)安装编译环境和依赖包(前提:必须联网)
依次输入以下三条命令:
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
安装 cmake 时, 如果网络不好,会导致下载超时,最好是网络较好。
3、编译
依次输入以下三条命令:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
sudo make install
其中第二条命令执行时间较长,需耐心等待。
4、环境配置
依次输入以下两条命令:
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
最后一条命令特别重要,它会使配置生效。
三、实例测试
1、qt创建一个空的控制台项目,项目的.pro文件配置如下:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
main.cpp
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2
LIBS += /usr/local/lib/libopencv_highgui.so \
/usr/local/lib/libopencv_core.so \
/usr/local/lib/libopencv_imgproc.so \
/usr/local/lib/libopencv_imgcodecs.so
2、源码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImg(500, 500, CV_8UC3);
srcImg.setTo(255);
imshow("srcImg", srcImg);
waitKey(0);
return 0;
}
编译运行通过!