久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

OpenCV學習筆記(二十五)——OpenCV圖形界面設計Qt+VS2008

 年華似水匆匆 2013-10-09

一直對MFC對OpenCV的支持不好而耿耿于懷,,了解了Qt對OpenCV支持很好,但網(wǎng)上這方面的資料很少,。大部分的圖形交互的設計都是基于OpenCV2.0之前的數(shù)據(jù)結構lpImage進行的,。最近得到了一本好書《OpenCV 2 Computer Vision Application Programming Cookbook》,下載的鏈接為http://ishare.iask.sina.com.cn/f/20485520.html?retcode=0,,2011年5月出版,,全書都是基于OpenCV2.2版本的實現(xiàn),,采用了新的數(shù)據(jù)結構。我這里強烈建議利用C++開發(fā)的朋友們不要再使用老版本的數(shù)據(jù)結構了,,實在影響開發(fā)效率,。至于大家最熟悉的參考書《learning OpenCV》和《OpenCV教程——基礎篇》這兩本廣為流傳的書,我的看法是已經(jīng)遠遠不能滿足OpenCV新版本的學習了,。真的希望這本新書的中文版盡快出爐,。

參考這本書的利用Qt創(chuàng)建GUI,不過書中的辦法是在Qt Creator下實現(xiàn)的,,我這里通過VS2008+Qt實現(xiàn),。下面結合一個例程介紹一下如何在Qt的GUI環(huán)境下開發(fā)OpenCV。

先新建工程Qt Project --> Qt Application,,點擊finish完成工程的創(chuàng)建,。然后在項目屬性里的連接器的附加依賴項里面添加opencv的lib文件。工程創(chuàng)建好之后,,一個后綴名為.ui的文件就是關于界面設計的,。首先創(chuàng)建兩個按鈕,拖拽兩個Push Buttons到Form中去,,修改其屬性,,一個名字為Open Image,一個為Process,。右鍵按鈕選擇connect signal為其添加響應函數(shù),,選擇clicked()。對應的cpp文件多出了on_OpenImage_clicked函數(shù),,代碼如下:

  1. #include "qttest1.h"   
  2.   
  3. qttest1::qttest1(QWidget *parent, Qt::WFlags flags)  
  4.     : QMainWindow(parent, flags)  
  5. {  
  6.     ui.setupUi(this);  
  7. }  
  8.   
  9. qttest1::~qttest1()  
  10. {  
  11.   
  12. }  
  13.   
  14.   
  15. void qttest1::on_OpenImage_clicked()  
  16. {  
  17.   
  18. }  

接下來要在對應的頭文件中添加顯示圖片的必要代碼,,添加QFileDialog類的聲明,OpenCV必要的include頭文件包含,,在類中聲明一個cv :: Mat成員變量,。代碼如下:

  1. #ifndef QTTEST1_H   
  2. #define QTTEST1_H   
  3.   
  4. #include <QtGui/QMainWindow>   
  5. #include <QFileDialog>   
  6. #include "ui_qttest1.h"   
  7.   
  8. #include <opencv2/core/core.hpp>   
  9. #include <opencv2/highgui/highgui.hpp>   
  10.   
  11. class qttest1 : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     qttest1(QWidget *parent = 0, Qt::WFlags flags = 0);  
  17.     ~qttest1();  
  18.   
  19. private:  
  20.     Ui::qttest1Class ui;  
  21.     cv::Mat image;  // cv圖片   
  22.   
  23. private slots:  
  24.     void on_OpenImage_clicked();  
  25. };  
  26.   
  27. #endif // QTTEST1_H  


接下來添加on_OpenImage_clicked的函數(shù)內(nèi)容。代碼如下:

  1. void qttest1::on_OpenImage_clicked()  
  2. {  
  3.     QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image"), ".", tr("Image Files (*.png *.jpg *.jpeg *.bmp)"));  
  4.     image = cv::imread(fileName.toAscii().data());  
  5.     cv::namedWindow("Original Image");  
  6.     cv::imshow("Original Image", image);  
  7. }  

類似的辦法添加Process按鈕的相應代碼:

  1. void qttest1::on_Process_clicked()  
  2. {  
  3.     cv::flip(image, image, 1);  
  4.     cv::namedWindow("Output Image");  
  5.     cv::imshow("Output Image", image);  
  6. }  

這樣就可以實現(xiàn)一個普通的按鈕響應,。但我們的目的是將圖片顯示在對話框form中,,這還需要進一步深入學習。與MFC中顯示圖片需要CvvImage類似,,要想在Qt的Form中顯示圖片,,圖片的格式也必須為QImage,需要將cv::Mat的BGR通道順序變換為RGBA,,QImage的格式為Format_RGB32,,調(diào)用cvtColor實現(xiàn)(這里例程里調(diào)用的為BGR2RGB,然后QImage的格式為Format_RGB888,,但我試驗顯示結果是有問題的,,故自己調(diào)整了一下),。(后經(jīng)實驗,BGR2RGB,,F(xiàn)ormat_RGB888這組參數(shù)對于webcam視頻是正確的,,對于我當時的實驗照片是不正確的,格式的問題真是混亂?。,。?/span>)實現(xiàn)代碼如下:

  1. cv::cvtColor(image, image, CV_BGR2RGBA);  
  2. QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB32);  
  3. QLabel *label = new QLabel(this);  
  4. label->move(200, 50);  
  5. label->setPixmap(QPixmap::fromImage(img));  
  6. label->resize(label->pixmap()->size());      
  7. label->show();  

注意打開圖片的路徑不要有中文,,最后的顯示結果為


相關代碼的下載地址為http://download.csdn.net/detail/yang_xian521/3793960

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多