QT reads and displays images

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QFileDialog>
#include <QLabel>
#include <QPen>
#include <QPainter>
#include <opencv2/opencv.hpp>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);
}

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

QImage MainWindow::MatToImage(cv::Mat &m)
{
    
    
    switch(m.type())
    {
    
    
        case CV_8UC1:
        {
    
    
            QImage img((uchar* )m.data, m.cols, m.rows, m.cols*1, QImage::Format_Grayscale8);
            return img;
            break;
        }
        case CV_8UC3:
        {
    
    
            QImage img((uchar* )m.data, m.cols, m.rows, m.cols*3, QImage::Format_RGB888);
            return img.rgbSwapped();
            break;
        }
        case CV_8UC4:
        {
    
    
            QImage img((uchar* )m.data, m.cols, m.rows, m.cols*4, QImage::Format_ARGB32);
            return img;
            break;
        }
        default:
        {
    
    
            QImage img;
            return img;
        }
    }
}

void MainWindow::on_imagePushButton_clicked()
{
    
    
    imagePath = QFileDialog::getOpenFileName(nullptr, "选择图片", QDir::homePath(),
                                             "Images (*.png *.xpm *.jpg)");
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    
    
    cv::Mat img = cv::imread(imagePath.toStdString());
    QImage qimg = MatToImage(img);
    QPainter painter(ui->viewlabel->setPixmap(QPixmap::fromImage(qimg)));
    painter.setPen(QPen(Qt::red,2));
    painter.drawRect(QRect(100,100,100,100));
//    QPixmap pix = QPixmap::fromImage(qimg);
//    pic->setPixmap(pix);
//    ui->ViewImageScrollArea->setWidget(pic);
}



Guess you like

Origin blog.csdn.net/qq_44798484/article/details/130474799