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頭文件,並編寫調用代碼了。以下圖所示。

相關文章
相關標籤/搜索