Qt调用OpenCV汇总(1)

//*************************************************************************************************************1html

在Qt Creator上新建一个项目。
右键新项目>>添加库…>>外部库>>选中库文件路径>>下一步,完成,添加到.pro文件中。
算法

在这里插入图片描述
而后再在pro文件中手动输入下面代码:
windows

INCLUDEPATH += D:\opencv\build\include\
               D:\opencv\build\include\opencv\
               D:\opencv\build\include\opencv2\

固然每一个人OpenCV的安装路径是不同的,你要找到你的安装路径下。
而后举个例子吧。
.pro文件:

网络

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
INCLUDEPATH += D:\opencv\build\include\
               D:\opencv\build\include\opencv\
               D:\opencv\build\include\opencv2\
win32:CONFIG(release, debug|release): LIBS += -LD:/opencv/build/x64/vc14/lib/ -lopencv_world342
else:win32:CONFIG(debug, debug|release): LIBS += -LD:/opencv/build/x64/vc14/lib/ -lopencv_world342d
else:unix: LIBS += -LD:/opencv/build/x64/vc14/lib/ -lopencv_world342
INCLUDEPATH += D:/opencv/build/x64/vc14
DEPENDPATH += D:/opencv/build/x64/vc14
SOURCES += \
    main.cpp \
    mainwindow.cpp
HEADERS += \
    mainwindow.h
FORMS += \
    mainwindow.ui
  •  

main.cppeclipse

#include "mainwindow.h"
#include <QApplication>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();


    return a.exec();
}

mainwindow.hide

#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <QMainWindow>
#include <QFileDialog>//文件对话框
#include <opencv2/core/core.hpp>//opencv相关的库文件
#include <opencv2/highgui/highgui.hpp>
using namespace cv;


namespace Ui {
class MainWindow;
}


class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);//explicit是显式的意思,构造函数,继承父类
    ~MainWindow();//析构函数


private slots://私有槽函数
    void on_pushButton_clicked();//声明按键


    void on_pushButton_2_clicked();


private:
    Ui::MainWindow *ui;
    Mat image;
};


#endif // MAINWINDOW_H

mainwindow.cpp函数

#include "mainwindow.h"//头文件
#include "ui_mainwindow.h"//ui界面头文件


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->pushButton_2->setEnabled(false);//初始按键2不能使用
}


MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()//按键定义
{
    //调用窗口打开文件
    QString filename = QFileDialog::getOpenFileName(this,
                                                    tr("open image"),
                                                    ".",
                                                    tr("Image file(*.png *.jpg *.bmp)"));
    image = imread(filename.toLocal8Bit().data());
    if(image.data) {
        ui->pushButton_2->setEnabled(true);//按键2恢复
    }
    //将Mat图像转换为QImage图像,才能显示在label上
    QImage img = QImage((const unsigned char*)(image.data),
                        image.cols, image.rows, QImage::Format_RGB888);//格式转换
    //设定图像大小自适应label窗口的大小
    img = img.scaled(ui->label->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
    ui->label->setPixmap(QPixmap::fromImage(img));
}


void MainWindow::on_pushButton_2_clicked()
{
    flip(image, image, 1);
    QImage img = QImage((const unsigned char*)(image.data),
                        image.cols, image.rows, QImage::Format_RGB888);
    img = img.scaled(ui->label->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);


    ui->label->clear();//清除窗口
    ui->label->setPixmap(QPixmap::fromImage(img));//显示其它图像
}

mainwindow.ui
在这里插入图片描述
工具

而后就能够运行,测试一下代码了。。。
在这里插入图片描述
学习

//**************************************************************************2测试

QT creator中使用opencv

    最近要用到opencv作图像方面的东西,网上不少是用VS加opencv,但本身对VS不怎么喜欢,想用QT Creator。在网上搜索了不少资料,终于花了一天的时间,在QT Creator上能使用opencv了。

    须要的软件:(1)QT Creator。个人版本是4.8.5。这个版本仍是在学习亚飞的QT Creator的时候安装的,网上有说QT版本低,而opencv版本高的话,可能在执行mingw32-make命令会报错。所以为了以防万一,我下载的低版本的opencv

                      (2)opencv。个人版本是2.3.0

                     (3)cmake 下载地址http://www.cmake.org/cmake/resources/software.html

另外个人计算机的操做系统是xp,32位的。

    首先将QT creator, cmake安装好,这个蛮简单的。而安装opencv,设置解压路径就能够了。安装CMake要注意:(1)安装路径不能有中文和空格(2)勾选加入全部境变量中。

    将C:\Qt\mingw\bin加入系统变量。

    CMake OpenCV,使用CMake(http://www.cmake.org/)生成OpenCV库的makefile文件,须要注意的是解压出来的OpenCV存储路径中的文件夹不要带有空格或者中文(个人是E:\OpenCV,不要用相似于E:\工程\opencv, E:\Open CV这种),打开CMake,指定源码位置(就是OpenCV解压出来的地方)和存放生成文件的地方,Configure弹出如图对话框,选择MinGW Makefiles和Specify native compilers

    

跳出对话框用以指定C++和C的编译器路径,C用gcc.exe,在QtSDK目录下的mingw/bin子目录中,C++用g++.exe:

 

而后再次Configure,无错误后选中WITH_QT

再次Configure会出现下图信息提示找不到Qt的Qmake可执行文件

 

手动指定Qmake.exe所在目录

(注意这张图是我在网上复制的别人的)

再次Configure,无错误后 Generate。

 

 1> Cmd命令 转到Generate到的目录(个人是F:\OpenCV)

  cd F:\OpenCV

 2> Cmd命令 编译文件

 >> mingw32-make

 3> Cmd命令 编译INSTALL

 >> mingw32-make install

 

 

下面开始配置Qt Creator的OpenCV开发环境,拷贝下面三个文件夹放在同一个文件夹下(只需这三个目录,其他生成的文件和文件夹能够删除,以节省磁盘空间)

 

(1)OpenCV-2.3.0安装目录下的build/include目录

(2)CMake目标路径下,MinGW编译后的bin目录

(3)CMake目标路径下,MinGW编译后的lib目录

拷贝三个目录到同一目录后的结构以下图(我删除了原来的CMake目标目录中的其余目录,拷贝进来了include目录)

 

 将bin目录添加到系统环境变量

至此Qt Creator下的OpenCV开发环境已经配置好,下面在Qt Creator下测试是否已经配置成功

打开Qt Creator,新建一个空工程,而后添加一个cpp文件,任意命名

 在pro文件中添加以下OpenCV的依赖文件

INCLUDEPATH+=C:\OpenCV\include\opencv\

                    C:\OpenCV\include\opencv2\

                    C:\OpenCV\include

 

LIBS+=C:\OpenCV\lib\libopencv_calib3d230.dll.a\

        C:\OpenCV\lib\libopencv_contrib230.dll.a\

        C:\OpenCV\lib\libopencv_core230.dll.a\

        C:\OpenCV\lib\libopencv_features2d230.dll.a\

        C:\OpenCV\lib\libopencv_flann230.dll.a\

        C:\OpenCV\lib\libopencv_gpu230.dll.a\

        C:\OpenCV\lib\libopencv_highgui230.dll.a\

        C:\OpenCV\lib\libopencv_imgproc230.dll.a\

        C:\OpenCV\lib\libopencv_legacy230.dll.a\

        C:\OpenCV\lib\libopencv_ml230.dll.a\

        C:\OpenCV\lib\libopencv_objdetect230.dll.a\

        C:\OpenCV\lib\libopencv_video230.dll.a

这样之后,就能够在主函数中正常编写本身的程序了。

//**********************************************************************************3

用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/
    建议下载安装版的,这个能够自动加入系统环境变量。


  2. 安装,选择第二个,为全部用户添加系统路径。以后Qt能够自动找到CMake。

2. 安装Qt Creator

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

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

    建议下载最新版本,由于里面带的MinGW版本较高,若是MinGW版本比opencv须要的版本低会编译失败。

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

3. 下载opencv

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

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

若是编译失败,试试其余版本的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的路径。


  2. 用 Qt 打开 opencv 项目
    【Open Project】打开 opencv 的 CMakeLists.txt


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

  3. 进入【项目】,编译构造配置选择Release。

    而后等几分钟,这段时间 Qt 正在读取 CMakeLists.txt 文件,当在概要信息看到 Configuring done 和 Generating done 就读取完了。

  4. 进入【项目】,找到 CMAKE_INSTALL_PREFIX,设置一个路径,这个路径是编译完成后输出的路径。其余配置保持默认。而后点击 Apply Configuration Changes。未保存的内容会是粗体字,已改变的配置将会是斜体字,再点一次 Apply Configuration Changes,Apply Configuration Changes 按钮将会变成灰色。

  5. 再到构建步骤,详情,勾选install,而后点右下角的“锤子”,开始构建。构建过程要保持网络通畅,由于构建时会下载部分文件。这个过程会花半个小时左右,当“编译输出”中显示“正常退出”,表示构建成功,在 CMAKE_INSTALL_PREFIX 路径中能够看到产生的文件。若是编译失败,则换个opencv版本,从新尝试。


配置opencv开发环境

编译好的opencv会有如下这些文件夹,把这些文件放到合适的位置。我就放在c盘opencv文件夹里了。

  1. 配置opencv系统路径
    对计算机右键->属性->高级系统配置->环境变量>Path 变量里加入 opencv 的 bin 文件夹的路径,用分号跟其余路径分隔。


  2. 新建Qt项目

    经常使用的项目类型的说明:

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

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

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

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


测试

新建一个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
    两个路径之间用分号“;”分隔。


    作完这一步能够在本身电脑直接双击打开编译好的软件 ,可是在别人电脑里依然是缺乏文件。

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

  3. //**********************************************************************************4

  4. 在Qt Creator开发环境中配置OpenCV库的简明步骤

  5. 一、说明

    OpenCV库是一套全面而简洁的计算机视觉算法库,OpenCV主要由一些C及C++函数和类构成。在Windows平台上开发视觉算法时,Visual Studio IDE无疑是一款强大的工具软件,可是,若是要给咱们的OpenCV视觉算法加上漂亮的用户界面,即GUI,将会变得有些麻烦。在Visual Studio中,能够将OpenCV与MFC相结合开发界面,然而,MFC太庞大,且涉及到多线性(Multi-Thread)、先进图形图像显示、跨平台等需求时,使用MFC开发OpenCV算法界面会变得让人抓狂(姑且这么说吧)。另外一种技术,就是在Visual Studio中,咱们在视觉解决方案中能够创建C#工程,经过C#构建界面,这里,Visual Studio自带强大的Blend界面设计工具,那么问题又来了:C#和C++语言体系不一样,C#为解释型语言,C++为编译型语言,OpenCV自己为C++代码,两者在代码和数据交互上存在太多麻烦的转换,转换的过程浪费开发时间。

    所以,涉及到本文的主要目的,即:在Qt中引入OpenCV库,将Qt擅长的界面和OpenCV擅长的视觉算法有机结合起来,从而让咱们快速的进行项目的构建和开发。

     

    二、配置

    网上也有很多相关方法,本文说的是简明步骤,所以只简要描述一下关键的步骤。

    一、手头上要有OpenCV库,推荐的OpenCV库文件目录组织方式为:一个opencv主目录,一个include子目录(存放头文件),一个bin子目录(存放动态连接库.dll文件),一个lib文件(存放静态连接库.lib文件)。这样的组织方式更容易配置项目且便于移动和共享。(这里可下载最新的OpenCV库文件

    二、正确安装的Qt及Qt Creator开发环境。这里要注意Qt Creator构建套件部分的设置,下图为个人设置。尤为要正确设置编译器和调试器。

    三、将OpenCV文件放置在某个磁盘位置,例如D盘根目录,以下图。将bin目录添加到系统的环境变量PATH中,添加完成后要重启系统。

     

    四、在Qt Creator中新建工程项目,在项目配置文件.pro中填入以下红色框中的命令,而后点击菜单栏“构建”->“执行qmake”。

     

    五、完成以上工做后,即可在工程中引入OpenCV头文件,并编写调用代码了。以下图所示。

相关文章
相关标签/搜索