Qt 5.2+VS2012+OpenCV 2.4.7的环境配置

如果你安装的是使用Microsoft Visual Studio编译器的Qt(例如我安装的这个Qt,安装包文件名为:qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe),则不需要网传的对OpenCV进行编译的这个麻烦过程,直接利用VS的预编译文件即可。

需要注意的一点是Qt不支持Visual Studio Express版。另外你最好先在Visual Studio下完成OpenCV简单demo的编译(参看我之前的博文),确保OpenCV环境设置正确。

使用Qt Creator这个IDE而不是VS的好处在于Qt Creator能够非常方便地调用所有Qt的组件,而且更加轻量级、启动也很快速,开发跨平台应用时也更加方便(主流平台下都有Qt Creator,而只有Windows才有Visual Studio)。

Qt程序的项目配置文件保存在.pro文件里,类似于VS2012中所配置的,Qt也没有“全局”的INCLUDE和LIB(库)路径的修改功能,而是通过对pro文件的改动来配置编译时需要包含的路径和库文件。

在Qt Creator里,新建一个项目,Qt控制台应用就可以了。然后在“编辑”面板里打开项目的pro文件,如下图所示:

open-pro_file

添加下面几行:

INCLUDEPATH += D:/openCV_build/include

win32:CONFIG(debug, debug|release): {
LIBS += -LD:/openCV_build/x86/vc11/lib \
-lopencv_core247d \
-lopencv_imgproc247d \
-lopencv_highgui247d \
-lopencv_ml247d \
-lopencv_video247d \
-lopencv_features2d247d \
-lopencv_calib3d247d \
-lopencv_objdetect247d \
-lopencv_contrib247d \
-lopencv_legacy247d \
-lopencv_flann247d
} else:win32:CONFIG(release, debug|release): {
LIBS += -LD:/openCV_build/x86/vc11/lib \
-lopencv_core247 \
-lopencv_imgproc247 \
-lopencv_highgui247 \
-lopencv_ml247 \
-lopencv_video247 \
-lopencv_features2d247 \
-lopencv_calib3d247 \
-lopencv_objdetect247 \
-lopencv_contrib247 \
-lopencv_legacy247 \
-lopencv_flann247
}

路径使用斜杠(/)而不是反斜杠(\),INCLUDEPATH是项目编译时会包含的头文件目录,后面加上的是OpenCV预编译文件的include(这里的路径和我之前那篇Visual Studio 2012配置OpenCV环境的是一样的),LIBS则是编译时需要链接的文件,-L后紧跟的是目录,-l后则紧跟对应的动态链接,和VS中不太一样的是不用写出完整的文件名(没有后面的.lib后缀),和VS2012中类似的则是这里通过CONFIG来确认编译类型是debug还是release来使用debug链接或release链接。前面用win32则保证这些链接仅在Windows下编译时被链接器链接。

前面几行的末尾的反斜杠是用来把一行内容分成多行写(类似C++的语法),这样做的目的主要是清晰易读,不必写一行超长的语句。

pro文件修改完成后保存,回到main.cpp文件里,一个简单的OpenCV demo内容如下:

#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat img = imread("D:/demo.png");
    if (img.empty())
    {
        fprintf(stderr, "Error: load image failed.");
        return -1;
    }
    namedWindow("image", CV_WINDOW_AUTOSIZE);
    imshow("image", img);
    waitKey();
    return 0;
}

它会载入D:/demo.png这个图片文件,你可能需要进行一些改动以便让该demo顺利运行。另外之前改动了pro文件,但是Qt Creator很可能认为项目配置没有变化,因此不会自动重新运行qmake,需要手动运行一次以免出现“LNK 2019”链接错误或者找不到包含目录的错误。“构建->执行qmake”,然后再“构建->重新构建项目”。以后没有改动pro的话,就不需要执行qmake了,直接点左侧面板上那个榔头(Ctrl+B)构建项目就可以了,绿色三角形(Ctrl+R)运行程序,绿色三角形带虫子(F5)调试程序。

16 responses to “Qt 5.2+VS2012+OpenCV 2.4.7的环境配置”

  1. 温建 avatar
    温建

    恩恩,按照你给的提示,已经解决。非常感谢!

  2. NSAVIOUR avatar
    NSAVIOUR

    INCLUDEPATH+=D:\opencv\build\include
    win32:CONFIG(debug, debug|release): {
    LIBS+=-LD:\opencv\build\x86\vc12\bin
    LIBS+=-LD:\opencv\build\x86\vc12\lib
    } else:win32:CONFIG(release, debug|release): {
    LIBS+=-LD:\opencv\build\x86\vc12\bin
    LIBS+=-LD:\opencv\build\x86\vc12\lib
    }
    你好,我的pro是这样,平台啊什么的都是选择了对应的,没有错误。
    编译之后会提示:
    LNK1181:无法打开输入文件“D:\opencv\build\x86\vc12\lib.obj”

    1. librehat avatar

      麻烦你自己看清楚pro文件该怎么写,我博客说的很清楚了,你这样写是不正确的。

  3. 顾东峰 avatar
    顾东峰

    楼主为什么我所有的都配置好了之后 一按F5 它就变成了直接跳出一个命令框里面显示着 press to close the window… 没有跳出其他的窗口?也没有按照目录的图片显示? 是我的编译器或者debugger没有调试好吗?

    1. librehat avatar

      如果你编译器没有配置好,根本编译不了的,更别提运行得到CMD窗口了。
      如果你调试器没有配置好,应该是无法进入调试模式,和你的结果也没有关系。
      十有八九是你的图片路径写错了。

  4. chenguifang avatar
    chenguifang

    楼主,我用的2.4.9;配置跟你说的一样,也重新qmake过,但是为什么还是出现那个LNK2019的错误。以下是我的.pro

    #————————————————-
    #
    # Project created by QtCreator 2014-06-09T16:04:10
    #
    #————————————————-

    QT += core

    QT -= gui

    TARGET = testCV
    CONFIG += console
    CONFIG -= app_bundle

    TEMPLATE = app

    SOURCES += main.cpp
    win32:CONFIG(debug|release, debug){
    LIBS += -C:/opencv/opencv-2.4.9/build/x86/vc11/lib\
    -lopencv_core249d\
    -lopencv_imgproc249d\
    -lopencv_highgui249d\
    -lopencv_ml249d\
    -lopencv_video249d\
    -lopencv_features2d249d\
    -lopencv_calib3d249d\
    -lopencv_objdetect249d\
    -lopencv_contrib249d\
    -lopencv_legacy249d\
    -lopencv_flann249d
    }else:
    win32:CONFIG(debug|release, release){
    LIBS += -C:/opencv/opencv-2.4.9/build/x86/vc11/lib\
    -lopencv_core249\
    -lopencv_imgproc249\
    -lopencv_highgui249\
    -lopencv_ml249\
    -lopencv_video249\
    -lopencv_features2d249\
    -lopencv_calib3d249\
    -lopencv_objdetect249\
    -lopencv_contrib249\
    -lopencv_legacy249\
    -lopencv_flann249
    }

    1. librehat avatar

      不知道和你在路径中使用连接符“-”有没有关系,你把opencv的目录名中的连接符改成下划线“_”,然后再试试看?

    2. chenguifang avatar
      chenguifang

      还是一样的问题。

    3. heathcliff avatar
      heathcliff

      我的结果也和你一样。5.2+opencv2.4.6
      不知道是怎么回事儿。

  5. flankechen avatar
    flankechen

    hi
    “不需要网传的对OpenCV进行编译的这个麻烦过程,直接利用VS的预编译文件即可。”指的是用Opencv包prebuild的Lib和dll?

    我用opencv2.4.9 包里面build, QT5.1 vs2012,VS2012用opencv没有任何问题,就是头文件死活加不到qt creator。

    难道opencv2.4.7是VS2012编的?2.4.9是VS2013编的?
    我还要用VS编译一次Opencv?

    1. librehat avatar

      恩,用prebuilt的lib、staticlib、bin就可以了。vc11对应的是VS2012,vc12对应VS2013.
      头文件加不进去肯定是pro文件没有写正确,要把lib和include都加进去,然后运行一次qmake

      1. flankechen avatar
        flankechen

        不行。。。。。
        creator老是说 “could not open include file:opencv.hpp”

        我把我的.pro贴出来

        #————————————————-
        #
        # Project created by QtCreator 2014-05-13T15:04:41
        #
        #————————————————-

        QT += core gui

        greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

        TARGET = testqt
        TEMPLATE = app

        SOURCES += main.cpp\
        mainwindow.cpp

        HEADERS += mainwindow.h

        FORMS += mainwindow.ui

        INCLUDEPATH += D:/OpenCV2.4.9_win32/opencv/build/include

        win32:CONFIG(debug, debug|release): {
        LIBS += -LD:/OpenCV2.4.9_win32/opencv/build/x86/vc11/lib \
        -lopencv_core249d \
        -lopencv_imgproc249d \
        -lopencv_highgui249d \
        -lopencv_ml249d \
        -lopencv_video249d \
        -lopencv_features2d249d \
        -lopencv_calib3d249d \
        -lopencv_objdetect249d \
        -lopencv_contrib249d \
        -lopencv_legacy249d \
        -lopencv_flann249d
        } else:win32:CONFIG(release, debug|release): {
        LIBS += -LD:/OpenCV2.4.9_win32/opencv/build/x86/vc11/lib \
        -lopencv_core249 \
        -lopencv_imgproc249 \
        -lopencv_highgui249 \
        -lopencv_ml249 \
        -lopencv_video249 \
        -lopencv_features2d249 \
        -lopencv_calib3d249 \
        -lopencv_objdetect249 \
        -lopencv_contrib249 \
        -lopencv_legacy249 \
        -lopencv_flann249
        }

        1. librehat avatar

          拜托,你INCLUDEPATH+=后面换行做什么?没有反斜杠
          “\”就换行的话下面一行就是单独的一行。

          还有,贴这么长的文本之后最好先在各大pastebin(如http://pastebin.com/)贴,然后在这里附链接。

        2. librehat avatar

          看走眼了,这边被折成两行了。
          D:/OpenCV2.4.9_win32/opencv/build/include这个文件夹存在吗?里面有opencv和opencv2没?
          看样子pro文件是没有问题的。

          1. flankechen avatar
            flankechen

            恩,我已经搞定了。
            这Pro文件没有问题,opencv也没有问题。我的qmake有问题,重新qmake回来就好了。

            anyway,谢谢啦!!

            BTW,我发现creator 在windows里面用debug实在是太慢了。。。。

          2. librehat avatar

            ……上次回复你的时侯我就说了要执行一次qmake……
            Windows下Creator用CDB调试启动确实超慢,MinGW GDB调试会快一些,不过用MinGW编译器的话又要用MinGW的Qt和OpenCV(OpenCV的MinGW库还得自己编译)。