MinGW版QT配置OpenCV,爬深坑心得

qi.wei

发布于 2018.10.11 23:46 阅读 2480 评论 0

 

文章分为以下几个部分:

      1. 问题背景

      2. 拨云开雾

      3. 如何编译MinGW版OpenCV

      4. 如何添加编译好的库文件

      5. 代码示例

      6. 总结

 

 

 

问题背景:

      OpenCV有着强大的图形图像处理功能,我想获取视频某一帧的图片并对图片进行处理,如果仅借助QT去实现是比较麻烦的,但是对于OpenCV来说,这或许是再简单不过的事情。那么问题来了,在QT中如何使用OpenCV?我最初想,使用OpenCV还不简单?把OpenCV的库下载下来在QT里添加库不就行了?然而现实并非想象中的一帆风顺,甚至可以说是很坎坷。添加库之后我自信满满的运行程序,运行的结果却是一行行晦涩的错误报告。我仔细检查了代码的每行语句,检查了添加库的那几行代码,一切都是正常不会有什么错误,这是为什么呢?

 

 

拨云开雾:

      后来经过多方面资料查找,搞明白了,原来QT Creator默认安装的构建套件是MinGW。OpenCV没有为我们编译好MinGW版,已经编译好的是OpenCV库是MSVC版,MSVC是VisualStudio的默认构建套件,如果在VS下使用OpenCV库,直接把库文件的路径引用过去,程序就可以正常编译链接,但是如果想在MinGW下使用OpenCV,这就需要我们先手动编译好库文件,然后再引用了。

 

 

如何编译MinGW版OpenCV:

      第一步:下载OpenCV的包解压缩到本地

      第二步:下载CMake,安装。

      第三步:使用 CMake 生成 OpenCV 的 Makefile。

      第四步:在命令提示符窗口编译OpenCV

      第五步:添加库的时候,引用的是自己编译生成的库文件路径。

 

编译OpenCV的详细步骤可以参考这篇文章:https://blog.csdn.net/huihut/article/details/78701814

Ps:编译一次要半个小时左右的时间,而且编译过程非常坑总是会出现一些错误而中途中断。为了编译这个东西,我就搞了好几天,最后果断选择了别人已经编译好的包,用起来美滋滋。

 

 

如何添加编译好的库文件:

      只需要在.pro文件中添加这两句:

       INCLUDEPATH += F:/OpenCV/mingw3.0/mingw-dist/include

       LIBS += F:/OpenCV/mingw3.0/mingw-dist/x86/mingw/bin/libopencv_*.dll

 

       第一句写的是编译OpenCV生成的include文件夹的路径,第二句写的是编译OpenCV生成的bin目录里所有的核心dll。

 

 

代码示例:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;

int main()
{
    //加载图片,0为单通道图片
    Mat image = imread("C:\\Users\\lenovo\\Desktop\\photo\\2.jpg",0);
    //判断是否加载成功
    if( image.empty() )
    {
        cout << "Can not load image." << endl;
        return -1;
    }
    //创建窗口
    cvNamedWindow("window", CV_WINDOW_NORMAL);
    //显示图片
    imshow("window",image);
    waitKey(0);

    return 0;
}

 

总结:

      对比MSVC和MinGW,MSVC是微软的VC编译器,MinGW是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时库。

      在Windows的平台上MSVC无疑是强大的,在使用库文件的时候就可以看出来,MSVC版的别人给编译好了,MinGW版的需要自己编译,这待遇的对比,MinGW会很伤心,但是MinGW强在它的跨平台性。所以各有各的好处吧。