Qt5.5.0(msvc2013)+OpenCV3.4.0(x86)+Qt creator配置过程

Qt5.5.0(msvc2013)+OpenCV3.4.0(x86)+Qt creator配置过程

  • 选择Qt msvc版本的原因
  • opencv3.4.0+opencv_contrib-3.4.0+CMake+vs2013(x86)编译
    • 阐明一点
    • 编译过程
      • 1.在网上下载opencv3.4.0以及opencv_contrib-3.4.0的源码包
      • 2.使用CMake进行源码编译(多次尝试后的总结)
        • 1.第一次configure
        • 2.第二次configure
      • 3.生成opencv库
    • 在Qt creator中配置opencv
      • 1.添加opencv的环境变量
      • 2.添加Qt的环境变量
      • 3.新建Qt测试工程
      • 4. 对.pro文件进行修改(配置opencv)
      • 5.可能遇到的问题
        • 1.找不到opencv2/opencv.hpp
        • 2.若程序通过编译后,异常结束
        • 3.若需要CMake编译时必要的文件

选择Qt msvc版本的原因

由于通常使用vs2013进行opencv的学习和程序编写,所以已经在设备上配置好了vs2013+OpenCV的环境,而且OpenCV也是加上了opencv_contrib进行了源码编译过的,但是由于后期需要使用Qt进行GUI界面的编写,同时将之前在vs2013上编写的opencv代码应用于该软件中,为了不重复编译OpenCV(Qt的MinGW版本需要对opencv重新进行MInGW的编译),因此考虑使用msvc版本的Qt(我才不会承认是自己之前装的就是msvc版本,懒得卸载重装才选择这个的)。

opencv3.4.0+opencv_contrib-3.4.0+CMake+vs2013(x86)编译

阐明一点

开始说是为了不用重新编译opencv才选择使用Qt的MSVC版本,这会怎么又要编译了呢?
答:由于本人失误,忘记自己之前编译的opencv是64位的,但是Qt却是32位的,而且也已经在VS2013中配置好了Qt,因此不想重装Qt。而且,又想使用opencv中xfeatures2d中的API,因此才考虑重新编译。

编译过程

虽然之前写过一篇关于opencv配置的爬坑教程,也是自己第一次编译opencv+contrib时的亲身经历,但是再次编译opencv时,就算按照自己的教程,也没有能顺利的编译成功

1.在网上下载opencv3.4.0以及opencv_contrib-3.4.0的源码包

opencv3.4.0+opencv_contrib-3.4.0源码包
下载成功后,解压到自己想要放置的文件夹下。

2.使用CMake进行源码编译(多次尝试后的总结)

1.第一次configure

打开CMake,在第一栏输入你下载的opencv源码包的路径,这里指的是opencv-3.4.0文件夹,并不是opencv_contrib-3.4.0文件夹。在第二栏中输入即将生成的opencv库的保存路径(根据个人情况选择)。
使用CMake第一次configure
设置好上面这些内容后,点击configure,会弹出窗口让你选择编译器,我选择的是visual studio 12 2013(这个编译出的是32位的opencv,如果要编译64位的opencv则需选择*visual studio 12 2013 Win64*),大概会进行2min左右的时间。
在我自己第一次config的过程中,CMake中产生了几个错误,通过寻找生成库路径(就是刚刚cmake第二栏中的路径)中的“CMakeDownloadLog.txt”文件,打开之后,其中记录了cmake在第一次config过程中下载文件的记录,可以看到其中有好几个文件缺失了,通过查阅资料发现,由于cmake在编译过程中需要从外网下载相关文件,但是由于自己的计算机无法访问外网,文件就下载失败了,所以编译不通过。因此从“CMakeDownloadLog.txt”文件中找到所缺失的文件名以及其下载路径,和下载之后的文件名以及保存路径,请能上外网的同学帮忙下载了相应的文件,并将修改文件名后的文件复制进指定的文件夹下。然后点击Generate

2.第二次configure

当第一次点击generate后,显示generate done后,我们开始进行第二次config的设置。
第二次config之前的设置
有些博主会建议勾选上BUILD_opencv_world这个模块,目的是将opencv中包含的所有模块合并成一个总模块,这样在配置环境的时候就可以只配置这一个模块了。但是,我尝试勾选了这个选项,最终编译的时候某个模块出错了,但是错误提示却只提示错误出在了这个总模块中,这样就很难排查是哪个模块出了问题,而且,在找资料的过程中发现,有博主建议不要勾选这个选项,因为勾选了这个选项后很容易出问题。

在选择完成后,即可点击configure进行第二次config,此次过程耗时约5min,当这一次的config完成后,后半部分会有选项已经由红转白,但是还是会有部分选项是红色的,这是因为在第二次config期间还是会在外网下载需要的文件,但是还是下载失败,因此可以采取与之前相同的方法查找相应文件的下载链接,以及需要修改的名称,以及需要放置在哪个文件夹中。待这些操作完成后,再次点击configure,待所有选项全部变为白色,即可点击generate,待显示“generate done”后,cmake阶段已经完成。

若如上述由于无法成功下载必要的文件导致编译失败,则点击此处可进行下载。

3.生成opencv库

在生成库路径下寻找“opencv.sln”文件,双击打开
opencv.sln文件
打开该工程文件后,需要等待文件加载完成,如下图下部蓝色部分显示的内容。
打开工程后
等道所需文件全部加载完成后,该蓝色部分会显示“就绪”二字(如下图所示),这时才可以开始生成所需的opencv库。
就绪
之后点击生成->批生成,
生成
再按下图勾选,勾选后点击“生成”(若已经生成,则点击重新生成)
生成
之后会进入漫长的等待环节(大约一顿午饭的时间吧)。
但是在生成之后会有报错内容,说无法打开“opencv2/xfeatures2d/cuda.hpp”文件
找不到cuda.hpp
查找了多篇博客,尝试了许多方法后,终于在这篇文章的评论中找到了解决方法,如下图所示:
解决方法
即:在编译之前,修改你的opencv源码文件夹下的CMakeLists.txt文件(即opencv.-3.4.0\modules\stitching\CMakeLists.txt),在其中加入这样一条语句:
添加语句
然后点击保存。删除掉你之前生成库文件夹下的所有内容,然后再次重新执行之前的所有操作。
最后,会得到如下图所示的状态,即为编译成功:
生成成功
生成好的库文件全部集中在你之前设置的生成库目录下的install文件夹中,其余的内容即可删掉不用。
至此,32位的opencv库已经编译成功。

在Qt creator中配置opencv

1.添加opencv的环境变量

在环境变量的path中添加如下环境变量(路径根据自己生成的opencv库的路径来)
opencv环境变量

2.添加Qt的环境变量

同样,在Qt的安装目录下找“bin”、"lib"文件夹,以及“QtCreator”文件夹(同样,还是按照你的设备上的安装路径来)。
Qt的环境变量

3.新建Qt测试工程

我创建的是Qt的widget工程,然后对主函数进行如下修改(注意图片路径的书写格式!!!
Qt测试工程

4. 对.pro文件进行修改(配置opencv)

在.pro文件中添加如下语句,即可配置opencv。
配置opencv
为了方便大家复制粘贴,直接将我添加的内容以文本形式呈现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
INCLUDEPATH += D:\Qt\opencvQt\opencv_Qt32\install\include
INCLUDEPATH += D:\Qt\opencvQt\opencv_Qt32\install\include\opencv
INCLUDEPATH += D:\Qt\opencvQt\opencv_Qt32\install\include\opencv2
CONFIG(debug,debug|release){
LIBS += -LD:\Qt\opencvQt\opencv_Qt32\install\x86\vc12\lib \
    -lopencv_aruco340d \
    -lopencv_bgsegm340d \
    -lopencv_bioinspired340d \
    -lopencv_calib3d340d \
    -lopencv_ccalib340d \
    -lopencv_core340d \
    -lopencv_datasets340d \
    -lopencv_dnn340d \
    -lopencv_dpm340d \
    -lopencv_face340d \
    -lopencv_features2d340d \
    -lopencv_flann340d \
    -lopencv_fuzzy340d \
    -lopencv_highgui340d \
    -lopencv_img_hash340d \
    -lopencv_imgcodecs340d \
    -lopencv_imgproc340d \
    -lopencv_line_descriptor340d \
    -lopencv_ml340d \
    -lopencv_objdetect340d \
    -lopencv_optflow340d \
    -lopencv_phase_unwrapping340d \
    -lopencv_photo340d \
    -lopencv_plot340d \
    -lopencv_reg340d \
    -lopencv_rgbd340d \
    -lopencv_saliency340d \
    -lopencv_shape340d \
    -lopencv_stereo340d \
    -lopencv_stitching340d \
    -lopencv_structured_light340d \
    -lopencv_superres340d \
    -lopencv_surface_matching340d \
    -lopencv_text340d \
    -lopencv_tracking340d \
    -lopencv_video340d \
    -lopencv_videoio340d \
    -lopencv_videostab340d \
    -lopencv_xfeatures2d340d \
    -lopencv_ximgproc340d \
    -lopencv_xobjdetect340d \
    -lopencv_xphoto340d
} else {
LIBS += -LD:\Qt\opencvQt\opencv_Qt32\install\x86\vc12\lib \
    -lopencv_aruco340 \
    -lopencv_bgsegm340 \
    -lopencv_bioinspired340 \
    -lopencv_calib3d340 \
    -lopencv_ccalib340 \
    -lopencv_core340 \
    -lopencv_datasets340 \
    -lopencv_dnn340 \
    -lopencv_dpm340 \
    -lopencv_face340 \
    -lopencv_features2d340 \
    -lopencv_flann340 \
    -lopencv_fuzzy340 \
    -lopencv_highgui340 \
    -lopencv_img_hash340 \
    -lopencv_imgcodecs340 \
    -lopencv_imgproc340 \
    -lopencv_line_descriptor340 \
    -lopencv_ml340 \
    -lopencv_objdetect340 \
    -lopencv_optflow340 \
    -lopencv_phase_unwrapping340 \
    -lopencv_photo340 \
    -lopencv_plot340 \
    -lopencv_reg340 \
    -lopencv_rgbd340 \
    -lopencv_saliency340 \
    -lopencv_shape340 \
    -lopencv_stereo340 \
    -lopencv_stitching340 \
    -lopencv_structured_light340 \
    -lopencv_superres340 \
    -lopencv_surface_matching340 \
    -lopencv_text340 \
    -lopencv_tracking340 \
    -lopencv_video340 \
    -lopencv_videoio340 \
    -lopencv_videostab340 \
    -lopencv_xfeatures2d340 \
    -lopencv_ximgproc340 \
    -lopencv_xobjdetect340 \
    -lopencv_xphoto340
}

注意!!!只要修改了.pro文件,必须进行“执行qmake”操作
执行qmake操作
注意!!!需要以上文本中的路径改为自己的opencv生成路径

5.可能遇到的问题

1.找不到opencv2/opencv.hpp

可能的原因:路径没有配置正确,QtCreator的要求较高,不仅要求路径中没有中文,同时还要求路径中不能有空格

2.若程序通过编译后,异常结束

可能的原因:你没有将opencv的.dll文件目录添加环境变量,导致QtCreator找不到.dll文件,添加好环境变量即可成功。

3.若需要CMake编译时必要的文件

此处提供两个下载方式:
1.点击下载
2.百度云链接:https://pan.baidu.com/s/1kMS0uhC6Ehy62jbjN_IE1A
提取码:plhv