Ubuntu 18 Qt5.12编译opencv3.4+配置
尝试过很多种编译opencv的方法,这是成功率最高的一种 。。。。。。。。。。。。。
1、准备
1.1.确保正确安装Qt,并可以正常运行示例程序。
安装GCC和G++,这是必须的!
sudo apt install gcc
sudo apt install g++
1.1.1下载Qt
下载地址
http://download.qt.io/archive/qt/
1.1.2 安装Qt
跳转到安装包所在的目录,执行:(注意安装包的名字!)
sudo chmod 777 qt-opensource-linux-x64-5.12.0.run
./qt-opensource-linux-x64-5.12.0.run
1.2 安装cmake
sudo apt install cmake-qt-gui
安装后打开Qt确认如下图:
1.3下载opencv
地址:
https://opencv.org/releases.html
下载 Sources 并解压。
2、编译
2.1 载入opencv
打开Qt–文件–打开文件或项目,选择解压的opencv源码里面的CMakeists.txt
然后选择Configure,这里按需要选择,没有特殊需求用Default就行,修改下编译的目录,这个目录是用来装编译过程中文件的地方,编译成功后可以删掉。
Configure Project开始载入opencv。
之后会出现卡住的问题,这是因为这里下载的文件较大,主要是网络的问题。。。。。。。。。。。
网络好的2.1.0这一步可以忽略。
2.1.0解决编译中卡住的问题
问题如图(’概要信息‘里面的):
打开解压的opencv源码里面的3rdparty/ippicv/ippicv.cmake文件
将链接
"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"
替换成
"https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20180723/ippicv/"
注意替换的链接里面文件的版本!!!!
查看文件版本的方法:
打开3rdparty/ippicv/ippicv.cmake文件
注意需要的版本的文件名,然后到这个网站去找
https://github.com/opencv/opencv_3rdparty/branches/all
目的就是让编译器能找到需要的文件。
然后关掉Qt重新载入可以看到:
载入成功:
2.2配置编译
2.2.1 CMake
点击项目
在CMake下找到CMAKE_INSTALL_PREFIX修改编译后的库文件和头文件的存放目录
修改后,单击Apply Configuration Changes粗体变成斜体后,修改生效,其他项目如果没有特殊需求保持默认即可。
2.2.2 构建步骤
点击详情,选择install
2.2.3开始编译
点击左下角的锤子,开始编译啦!!
编译结果:
3、测试
使用opencv库之前必须添加环境变量,否则会出现如下错误
添加环境变量方法:
跳转到目录/etc/ld.so.conf.d/
新建一个opencv.conf
sudo vim opencv.conf
添加一句,这个路径就是安装编译好的opencv库的路径
home/hello/opencv/opencv3.4/lib
保存之后
sudo ldconfig -v
在显示的库的目录里面看是否有opencv的库文件,如果有则添加成功
新建Qt工程
在.pro文件中添加
INCLUDEPATH += /home/hello/opencv/opencv3.4/include \
/home/hello/opencv/opencv3.4/include/opencv \
/home/hello/opencv/opencv3.4/include/opencv2
LIBS += /home/hello/opencv/opencv3.4/lib/libopencv_*
main.cpp中
#include "mainwindow.h"
#include <QApplication>
#include "opencv2/opencv.hpp"
#include "cv.h"
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
Mat image = imread("test.jpg");
imshow("test", image);
waitKey(0);
return a.exec();
}
结果: