不得不说,这个过程踩的坑实在是太多了,今天把这个写下来,以做备用。
目录
一、下载准备
1.QtCreater
2.Opencv
3.cmake
二、软件环境安装
1.Cmake安装
①安装过程一路next,除非自己指定安装路径以及环境变量路径,这里就直接让软件自己默认安装以及添加环境变量路径。
2.opencv安装
①指定Opencv安装路径
②进行安装
③安装完成
3.Qtcreater/Qt安装
①打开软件
② skip
③记录安装位置
④勾选Qt安装选项
⑤QtTools选项
⑥同意选项
⑦进行安装
⑧环境变量配置
三、编译Opencv(重头戏)
1.打开cmake(最好每次先清除下cache)
2.在刚才的Opencv解压根目录下创建opencv_build文件夹。(具体名称个人定,但尽量不要有中文)
3.cmake中指定opencv源码目录以及输出目录(刚才创建好的文件夹)
4.点击configure,首次配置编译方式
5.指定编译
6.finish编译
7.更改编译设置
①勾选WITH_QT和WITH_OPENGL
②填写QT5目录
③关闭python选项
④取消OPENCV_ENABLE_ALLOCATOR_STATS
⑤更改发布版本
8.再次编译
9.生成
10.关闭cmake
11.cmd进入刚创建opencv输出目录下
12.根据核心线程编译
13.漫长等待
14.编译完成
15.install 安装
16.添加环境变量
四、Qt启动
1.新建项目
2.选择MinGw
3.生成项目
4.修改.pro项目文件
5.添加opencv程序
6.release运行
这里我是通过清华镜像源下载的,具体版本为:
- - Qt5.9.89(32bit)
- - QtCreater4.8.2
清华镜像源Qt下载网址
下载界面如下:
下载这个之后,默认是Qt5.9.8+QtCreater4.8.2,安装过程在后面。
在这里疑惑过一段时间,是关于32bit与64bit的问题。因为在我的mac本上,我默认安装的是X64的安装包,之前编译的Opencv也是默认编译的x64,所以按照一般的帖子,只要把环境路径往QtCreater的pro文件那么一填,就能够成功运行。但是隔天我到windows的电脑上这样操作就不行,网上windows->qt一般全是32位,那么qt中的mingw安装也是32位的,而Opencv下载之后,预编译版本只有64位的,这就可能造成Opencv的库文件不能进行调用的情况(我是出现了错误,但不确定是否是因为这个情况)。所以就需要用32位的mingw去进行编译,生成32位版的opencv连接库,那么就可以和Qt中的32位配套了。
这里建议Opencv的版本不要过高,我选择的是Opencv4.4版本。
Opencv下载地址
下载界面如下:
在Opencv官网中,推荐的安装方式有两种,一个是预编译版本的,一个是自编译版本的,我们下载的属于是预编译版本的,里面文件将将涵盖编译好的build文件与source源文件,在build文件家中有x64的lib,dll文件供调用,对于一般的vs+Opencv开发,这个就够了,只需要将Opencv的环境配置以下,以及vs软件的库索引、lib连接加载以下就ok,这个网上很多,一般也都能配置成功,不再多说。
我们用Cmake的目的是将Opencv的源文件写成Makefile文件,告诉mingw怎么去编译它。整个过程比较复杂,比自己手写CmakeLists.txt要方便许多,这一步也是必须的。
下载的时候,尽量下载较新的版本,因为低版本的cmake可能会在某一个过程中不受支持而导致整个项目失败。
Cmake下载链接
这里为了保险,暂时也下载32位的。
到这里,安装包准备完毕。
整个过程在干净的虚拟机中进行操作。
安装成功后,可以看到环境变量中已经存在了cmake的环境变量。
MinGW 5.3.0 32-bit 以及所有的Qt选项
主要勾选MinGw
等待时间较长。
很棒,99%卡着了:
安装完成
找到刚安装的QT目录下的路径:C:\Qt\Qt5.9.8\Tools\mingw530_32\bin,添加到环境变量中。
这个过程比较扯,很多次都死到这个地方,需要注意下。
源码目录:C:/opencv/opencv/sources
输出目录:C:/opencv/opencv/opencv_build
这个一定要按这个方式来配!
MinGW Makefiles + Specify native compilers
这个生成好本地makefile之后,我们会用QT自带的32位的mingw去编译。
编译器的路径在刚才安装好的Qt中,下面是我的目录:
gcc.exe: C:/Qt/Qt5.9.8/Tools/mingw530_32/bin/gcc.exe
g++.exe:C:/Qt/Qt5.9.8/Tools/mingw530_32/bin/g++.exe
此时,是在编译过程中的,时间较长,等待结束。
此过程,全程应该是正常的,不应有报错红字出现,如果有,注意排查问题。
等待上步结束,执行以下操作:
点击configure编译一遍。
上步编译后,将出现错误:
点击确定,填写QT5目录:
我的QT5的目录为:C:/Qt/Qt5.9.8/5.9.8/mingw53_32/lib/cmake/Qt5
这里建议点击按钮进行路径选择,不要直接复制,以免引起不必要的麻烦。
这个步骤是在试错了无数次后,发现的问题,尽管有时候可以添加python2,python3的路径,但是在最后的阶段,总会报出 can't find "all"之类的错误,这里直接将Python取消勾选。
搜索:OPENCV_ENABLE_ALLOCATOR_STATS,取消勾选
搜索:MAKE_BUILD_TYPE,改为release
点击configure 再次编译。
编译完成后,点击生成
出现如下界面,cmake的任务就结束了,关闭cmake
mingw32-make -j [+线程数]
根据自身电脑线程数进行更改,提升速度,我的是虚拟机,只有2。
这个过程中,如果短暂卡住停滞了,按下回车确定。
mingw32-make install
将编译完成后的bin目录进行添加,我的目录是:C:\opencv\opencv\opencv_build\install\x64\mingw\bin
添加路径,具体路径根据自己安装目录进行修改。
INCLUDEPATH += C:\opencv\opencv\opencv_build\install\include
INCLUDEPATH += C:\opencv\opencv\opencv_build\install\include\opencv2
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_core440.dll
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_highgui440.dll
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_imgcodecs440.dll
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_imgproc440.dll
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_features2d440.dll
LIBS += C:\opencv\opencv\opencv_build\install\x64\mingw\bin\libopencv_calib3d440.dll
将mainwindow.cpp修改至如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// read an image
cv::Mat image = cv::imread("C:/1.jpg", 1);
// create image window named "My Image"
cv::namedWindow("My Image");
// show the image on window
cv::imshow("My Image", image);
}
MainWindow::~MainWindow()
{
delete ui;
}
大功告成!
整个过程比较艰辛,绝大部分原因是自己对编译理解不到位,以至于现在我仍旧是不懂:最终目标我才用的是32bit编译,但是opencv仍出现的是x64的安装目录,但好在还是运行成功了。像刚开始所说,我mac本的x64是直接能用的,但是换到windows上x64的opencv dll文件使用起来是有问题的,所以才有了这整个过程,如果你的能够直接使用,不用这么麻烦,那么是再好不过了。
整体来说是能用了,但遗留了一个问题,为什么编译出来的Opencv,install之后仍是x64,而不是x86呢?