QT內label控件通過opencv顯示圖像


1.對pro進行配置,使其能夠理解opencv。

[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. INCLUDEPATH+=C:\opencv_for_qt5\include\opencv\
                        C:\opencv_for_qt5\include\opencv2\
                        C:\opencv_for_qt5\include\


    LIBS+=C:\opencv_for_qt5\lib\libopencv_calib3d2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_contrib2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_core2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_features2d2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_flann2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_gpu2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_highgui2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_imgproc2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_legacy2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_ml2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_objdetect2410.dll.a\
            C:\opencv_for_qt5\lib\libopencv_video2410.dll.a

2.在*.ui內創建兩個命令按鈕,一個標簽。其界面為:


3.配置其.h文件、.cpp文件。

.h文件:

[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. #ifndef MAINWINDOW_H  
  2. #define MAINWINDOW_H  
  3.   
  4. #include <QMainWindow>  
  5. #include <opencv2/core/core.hpp>  
  6. #include <opencv2/highgui/highgui.hpp>  
  7. namespace Ui {  
  8. class MainWindow;  
  9. }  
  10.   
  11. class MainWindow : public QMainWindow  
  12. {  
  13.     Q_OBJECT  
  14.   
  15. public:  
  16.     explicit MainWindow(QWidget *parent = 0);  
  17.     ~MainWindow();  
  18.     cv::Mat image;  
  19.       QImage img;  
  20.   
  21. private slots:  
  22.     void on_pushButton_clicked();  
  23.   
  24.     void on_pushButton_2_clicked();  
  25.   
  26. private:  
  27.     Ui::MainWindow *ui;  
  28. };  
  29.   
  30. #endif // MAINWINDOW_H  

.cpp文件

[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. #include "mainwindow.h"  
  2. #include "ui_mainwindow.h"  
  3. #include "mainwindow.h"  
  4. #include "ui_mainwindow.h"  
  5. #include <QString>  
  6. #include <QFileDialog>  
  7. #include <QMessageBox>  
  8. #include <opencv/cv.h>  
  9. #include <QTextCodec>  
  10. MainWindow::MainWindow(QWidget *parent) :  
  11.     QMainWindow(parent),  
  12.     ui(new Ui::MainWindow)  
  13. {  
  14.     ui->setupUi(this);  
  15. }  
  16.   
  17. MainWindow::~MainWindow()  
  18. {  
  19.     delete ui;  
  20. }  
  21.   
  22. void MainWindow::on_pushButton_clicked()  
  23. {  
  24.     QString filename = QFileDialog::getOpenFileName(this,tr("Open Image"),"",tr("Image File(*.bmp *.jpg *.jpeg *.png)"));  
  25.        QTextCodec *code = QTextCodec::codecForName("gb18030");  
  26.        std::string name = code->fromUnicode(filename).data();  
  27.        image = cv::imread(name);  
  28.        if(!image.data)  
  29.        {  
  30.            QMessageBox msgBox;  
  31.            msgBox.setText(tr("image data is null"));  
  32.            msgBox.exec();  
  33.        }  
  34.        else  
  35.        {  
  36.            cv::cvtColor(image,image,CV_BGR2RGB);  
  37.            img = QImage((const unsigned char*)(image.data),image.cols,image.rows, image.cols*image.channels(),  QImage::Format_RGB888);  
  38.            ui->label->clear();  
  39.            ui->label->setPixmap(QPixmap::fromImage(img));  
  40.            //ui->processPushButton->setEnabled(true);  
  41.            ui->label->resize(ui->label->pixmap()->size());  
  42.        }  
  43. }  
  44.   
  45. void MainWindow::on_pushButton_2_clicked()  
  46. {  
  47.     cv::flip(image,image,1);  
  48.        img = QImage((const unsigned char*)(image.data),image.cols,image.rows,image.cols*image.channels(),  QImage::Format_RGB888);  
  49.        ui->label->setPixmap(QPixmap::fromImage(img));  
  50. }  

補充:

[cpp] view plain copy 在CODE上查看代碼片派生到我的代碼片
  1. image.cols*image.channels()  
可以改為image.step.

參考資料:

1.使用Qt顯示openCV矩陣圖片    http://blog.csdn.net/homechao/article/details/8989641

2. Qt中用QLabel顯示OpenCV中Mat圖像數據出現扭曲現象的解決    http://lovelittlebean.blog.163.com/blog/static/11658218620125208212189/


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com