用Qt Creator编译opencv并配置开发环境

前言

opencv是一个跨平台计算机视觉库,使用前需要把它编译成二进制的静态库和动态库,之后在代码中直接连接到二进制库。

网上很多教程都是用CMake配合MinGW编译opencv,其中需要用到命令行操作,其实有更简单的方法,Qt Creator支持CMake,可以直接用Qt Creator在图形界面中编译好opencv。

对于各个C++ IDE的看法

我试过vs2015,eclipse,code blocks,Qt Creator,各有优缺点。

  • vs2015
    opencv for windows中有已经编译好的文件可以直接调用,不需要再手动编译opencv。但是vs太过庞大,功能复杂,打开界面十分缓慢,用起来有点麻烦,不适合初学者。并且vs只能在windows上用,我更喜欢多平台通用的IDE。

  • eclipse
    打开界面的速度比vs还要慢,果断放弃。

  • code blocks
    功能强大,界面不太漂亮,比vs还要复杂的界面让新手无所适从。

  • Qt Creator
    Qt Creator的界面很简洁美观,启动速度很快,并且适合以后用Qt开发图形交互界面,支持windows、Linux、Mac多个平台,内联CMake,十分适合新手作为开发环境。


准备

  1. 安装CMake
  2. 安装Qt Creator
  3. 下载opencv

1. 安装CMake

编译opencv需要用到CMake这个工具。

  1. 下载:https://CMake.org/download/
    建议下载安装版的,这个可以自动加入系统环境变量。
    用Qt Creator编译opencv并配置开发环境_第1张图片

  2. 安装,选择第二个,为所有用户添加系统路径。之后Qt可以自动找到CMake。
    用Qt Creator编译opencv并配置开发环境_第2张图片

2. 安装Qt Creator

  1. 下载:https://www.qt.io/download-open-source/#section-2
    选择离线安装包,在线安装太慢,经常会安装失败。

    选择MinGW版本。VS 版本还需要安装对应的VS,单独安装Qt 是不可用的,而MinGW版本自身带有MinGW。

    建议下载最新版本,因为里面带的MinGW版本较高,如果MinGW版本比opencv需要的版本低会编译失败。

    用Qt Creator编译opencv并配置开发环境_第3张图片

  2. 安装:安装路径不能有空格,我安装在默认路径,然后一路NEXT。

3. 下载opencv

下载opencv for Linux
http://opencv.org/downloads.html

opencv for windows 跟 opencv for Linux 的源码是一样的,只是
opencv for windows 里面多了以编译好的 opencv,这个我们不需要,只要下载源码就行了。

用Qt Creator编译opencv并配置开发环境_第4张图片

如果编译失败,试试其他版本的opencv。
我在Ubuntu上编译3.1版失败,编译2.4.13和3.0.成功,在windows上编译3.1成功,3.0却失败,试了不少于10次,之后才意识到跟MinGW版本有关,MinGW版本要跟opencv版本对应才能编译成功。


编译opencv

  1. 确认Qt成功找到 CMake
    打开 Qt Creator,工具->选项->构建和运行->CMake,如果之前 CMake 配置好了系统路径,这里应该会自动加载到系统路径,否则手动指定CMake的路径。
    用Qt Creator编译opencv并配置开发环境_第5张图片

  2. 用 Qt 打开 opencv 项目
    【Open Project】打开 opencv 的 CMakeLists.txt
    用Qt Creator编译opencv并配置开发环境_第6张图片

    之后会出现一个 Configure Project 窗口,配置编译时产生的中间文件保存的路径,这些不用改,直接点击 Configure Project 按钮。中间文件会保存在跟 opencv 的文件夹在同一路径的一个文件夹,编译完删掉就好了。

  3. 进入【项目】,编译构造配置选择Release。
    用Qt Creator编译opencv并配置开发环境_第7张图片

    然后等几分钟,这段时间 Qt 正在读取 CMakeLists.txt 文件,当在概要信息看到 Configuring done 和 Generating done 就读取完了。
    用Qt Creator编译opencv并配置开发环境_第8张图片

  4. 进入【项目】,找到 CMAKE_INSTALL_PREFIX,设置一个路径,这个路径是编译完成后输出的路径。其他配置保持默认。然后点击 Apply Configuration Changes。未保存的内容会是粗体字,已改变的配置将会是斜体字,再点一次 Apply Configuration Changes,Apply Configuration Changes 按钮将会变成灰色。
    用Qt Creator编译opencv并配置开发环境_第9张图片

  5. 再到构建步骤,详情,勾选install,然后点右下角的“锤子”,开始构建。构建过程要保持网络通畅,因为构建时会下载部分文件。这个过程会花半个小时左右,当“编译输出”中显示“正常退出”,表示构建成功,在 CMAKE_INSTALL_PREFIX 路径中可以看到产生的文件。如果编译失败,则换个opencv版本,重新尝试。
    用Qt Creator编译opencv并配置开发环境_第10张图片


配置opencv开发环境

编译好的opencv会有以下这些文件夹,把这些文件放到合适的位置。我就放在c盘opencv文件夹里了。
用Qt Creator编译opencv并配置开发环境_第11张图片

  1. 配置opencv系统路径
    对计算机右键->属性->高级系统配置->环境变量>Path 变量里加入 opencv 的 bin 文件夹的路径,用分号跟其他路径分隔。
    用Qt Creator编译opencv并配置开发环境_第12张图片

  2. 新建Qt项目

    常用的项目类型的说明:

    • Qt console Application:Qt的控制台项目,不创建Qt的图形界面,只会打开一个cmd窗口。
    • 【Non-Qt Projectt】->plain C/C++ Application:创建的项目不带有Qt的库,最适合学习C/C++。创建后主程序就已存在一个Hello World!示例。

    用Qt Creator编译opencv并配置开发环境_第13张图片

  3. 给qt项目添加头文件路径和静态库路径
    在.pro文件中添加以下代码。每次新建项目都要添加,好在复制粘贴很方便。

INCLUDEPATH += C:/opencv/include \
               C:/opencv/include/opencv \
               C:/opencv/include/opencv2

LIBS += C:/opencv/x86/mingw/lib/libopencv_*

用Qt Creator编译opencv并配置开发环境_第14张图片


测试

新建一个plain C/C++ Application,写入以下代码,cvLoadImage( )函数里填入一张照片的路径,如果能编译成功并显示照片就配置成功了。

注意文件的路径是正斜杠,不是windows路径的反斜杠,如果用反斜杠得这样写:"D:\\Pictures\\RoboMasters.jpg"

#include "opencv/highgui.h"

int main(int argc, char *argv[])
{
    IplImage* img = cvLoadImage("D:/Pictures/RoboMasters.jpg");
    if (img == NULL)
        return 1;
    cvNamedWindow("abc",CV_WINDOW_AUTOSIZE);
    cvShowImage("abc",img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyAllWindows();
    return 0;
}

关于Qt的动态库

在Qt中用Ctrl+R可以成功运行程序,但是直接双击程序运行却会提示缺少libgcc_s_dw2-1.dll,这是因为缺少Qt的动态库。

解决方法是发布软件时把动态库添加到工程目录里。方法如下:

  1. 添加系统环境路径
    C:\Qt\Qt5.7.0\5.7\mingw530_32\bin
    C:\Qt\Qt5.7.0\Tools\mingw530_32\bin
    两个路径之间用分号“;”分隔。

    做完这一步可以在自己电脑直接双击打开编译好的软件 ,但是在别人电脑里依然是缺少文件。

    用Qt Creator编译opencv并配置开发环境_第15张图片

  2. 打包动态库
    Qt 官方开发环境里自带了一个工具:windeployqt.exe。
    win+r 然后输入 cmd 打开命令提示行,切换到编译完的软件目录下,假设软件名叫 abc.exe,在命令行里输入 windeployqt abc.exe,就会把需要的动态库都复制到该软件目录下。

参考:http://blog.csdn.net/mevip/article/details/49761245

你可能感兴趣的:(opencv)