1. 程式人生 > >VS2015+QT5.7+opencv3.10影象處理

VS2015+QT5.7+opencv3.10影象處理

VS2010+QT5.7+opencv2.4.5影象介面第一個程式

         QT最近新出了5.1.0版本,最近要用QT編寫介面,所以重新下載了新的QT,替換了以前的Qt4.8.4.

         VS2015+opencv2.4.5+Qt4.8.4的配置過程,請參考博文 OpenCV2.4.5
+ QT4.8.4 + VS2015 環境搭建

 地址 http://blog.csdn.NET/skeeee/article/details/8802375

         在這就只介紹QT5.1安裝。

一、QT版本的下載

        QT 安裝包下載 Qt
5.1.0 for Windows 32-bit (VS 2010, 505 MB)
 (Info)

        QT VS2015外掛 Visual
Studio Add-in 1.2.2 for Qt5

  (does not work with the Express edition)

二、QT5.1 安裝

       2.1 軟體安裝

               安裝 QT VS Addin外掛,以及QT安裝包,要注意的是安裝路徑不能有中文,所以我QT安裝包直接選擇d:/QT,省下一直Next就行。

      2.2 環境變數的配置

              我的電腦-》右鍵屬性-》高階-》環境變數 ,在PATH中加上 ;D:\Qt\Qt5.7.0\5.7.0\msvc2010\bin

              如圖:

             

            然後在VS2017中也要設定環境變數,QT7-》屬性-》Add,版本名稱是QT5.7.0,路徑:D:\Qt\Qt5.1.0\5.1.0\msvc2010

 三、第一個圖形介面程式

       3.1新建QT5.1工程

             配置完成後,用VS2010新建一個工程,選擇QT5 Projects-》QT application,工程名為Qt5test

            

        一鍵Ok,直接Finish,工程就建立成功了。

  3.2 使用QT設計師設計介面以及連結資訊/槽

        雙擊qt5test.ui,會彈出來Qt 設計師介面,拖兩個按鈕新增到介面中,然後雙擊修改按鈕的名稱,以及改變按鈕的尺寸。

        然後連結資訊/槽,選中 編輯資訊/槽 按鈕(如下圖),左鍵Open Image按鈕,拖拽,就可以拖出一條連結訊號/槽的線,鬆開滑鼠,就彈出編輯出口(如下圖)。點選編輯按鈕,在槽中新增按鈕按下的響應函式,OpenImageClicked()以及ProcessClicked()函式,確定後,點選click,選擇OpenImageClicked()作為按鈕Open Image的響應函式,同樣設定Process的響應函式為ProcessClicked();設計好的介面記得儲存,VS2010執行是不會對Qt
Project自動儲存,只會載入之前儲存的介面

       

3.3  編寫響應函式程式

        在QT5test類中宣告和定義兩個按鈕響應函式OpenImageClicked()和ProcessClicked()

       雙擊qt5test.h,在類中新增兩個響應函式的宣告,新增標頭檔案,以及私有變數cv::Mat image;

       

[cpp] view plain copy print ?
  1. #ifndef QT5TEST_H  
  2. #define QT5TEST_H  
  3.   
  4. #include <QtWidgets/QMainWindow>  
  5. #include <Qlabel>      
  6. #include “ui_qt5test.h”  
  7.   
  8. #include <opencv/cv.h>  
  9. #include <opencv/highgui.h>  
  10.   
  11. class Qt5test : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     Qt5test(QWidget *parent = 0);  
  17.     ~Qt5test();  
  18.   
  19. private:  
  20.     Ui::Qt5testClass ui;  
  21.     cv::Mat image;   //定義私有變數 image  
  22.     cv::Mat result;//定義私有變數 result  
  23.   
  24. private slots:    //宣告訊號函式  
  25.     void OpenImageClicked();  
  26.     void ProcessClicked();  
  27. };  
  28.   
  29. #endif // QT5TEST_H  
#ifndef QT5TEST_H
  

    #define QT5TEST_H

    #include <QtWidgets/QMainWindow>

    #include <Qlabel>

    #include “ui_qt5test.h”

    #include <opencv/cv.h>

    #include <opencv/highgui.h>

    class Qt5test : public QMainWindow
    {
    Q_OBJECT

    public:
    Qt5test(QWidget *parent = 0);
    ~Qt5test();

    private:
    Ui::Qt5testClass ui;
    cv::Mat image; //定義私有變數 image
    cv::Mat result;//定義私有變數 result

    private slots: //宣告訊號函式
    void OpenImageClicked();
    void ProcessClicked();
    };

    #endif // QT5TEST_H

           雙擊qt5test.cpp,定義響應函式

    [cpp] view plain copy print ?
    1. #include “qt5test.h”  
    2.   
    3. Qt5test::Qt5test(QWidget *parent)  
    4.     : QMainWindow(parent)  
    5. {  
    6.     ui.setupUi(this);  
    7. }  
    8.   
    9. Qt5test::~Qt5test()  
    10. {  
    11.   
    12. }  
    13.   
    14. void Qt5test::OpenImageClicked()  
    15. {  
    16.     image = cv::imread(”img.jpg”);//讀取影象  
    17.     cv::cvtColor(image, image, CV_RGB2RGBA);//影象在QT顯示前,必須轉化成QImage格式,將RGBA格式轉化成RGB  
    18.     QImage img = QImage((const unsigned char*)(image.data),   
    19.         image.cols, image.rows, QImage::Format_RGB32);   
    20.     QLabel *label = new QLabel(this);  
    21.     label->move(130,50);  
    22.     label->setPixmap(QPixmap::fromImage(img));    
    23.     label->resize(label->pixmap()->size());  
    24.     label->show();  
    25. }  
    26.   
    27. void Qt5test::ProcessClicked()  
    28. {  
    29.     cv::flip(image,result,1);//對影象進行翻轉  
    30.     QImage img = QImage((const unsigned char*)(result.data),   
    31.         result.cols, result.rows, QImage::Format_RGB32);  
    32.     QLabel *label = new QLabel(this);  
    33.     label->move(380,50);  
    34.     label->setPixmap(QPixmap::fromImage(img));    
    35.     label->resize(label->pixmap()->size());  
    36.     label->show();  
    37. }  
    #include "qt5test.h"
    
    Qt5test::Qt5test(QWidget *parent)
    QMainWindow(parent)
    {
    ui.setupUi(this);
    }

    Qt5test::~Qt5test()
    {

    }

    void Qt5test::OpenImageClicked()
    {
    image = cv::imread(“img.jpg”);//讀取影象
    cv::cvtColor(image, image, CV_RGB2RGBA);//影象在QT顯示前,必須轉化成QImage格式,將RGBA格式轉化成RGB
    QImage img = QImage((const unsigned char*)(image.data),
    image.cols, image.rows, QImage::Format_RGB32);
    QLabel *label = new QLabel(this);
    label->move(130,50);
    label->setPixmap(QPixmap::fromImage(img));
    label->resize(label->pixmap()->size());
    label->show();
    }

    void Qt5test::ProcessClicked()
    {
    cv::flip(image,result,1);//對影象進行翻轉
    QImage img = QImage((const unsigned char*)(result.data),
    result.cols, result.rows, QImage::Format_RGB32);
    QLabel *label = new QLabel(this);
    label->move(380,50);
    label->setPixmap(QPixmap::fromImage(img));
    label->resize(label->pixmap()->size());
    label->show();
    }

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    3.4 執行程式結果如下

    四、參考資料

           Qt開發者社群  http://qt.csdn.net/index.aspx

           Qt Project 官網 http://qt-project.org/

          程式下載        VS2010+QT5.1.0+opencv
    測試程式


    					<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-778f64ae39.css" rel="stylesheet">
                </div>
    

    VS2010+QT5.7+opencv2.4.5影象介面第一個程式