qt显示cv::mat图片

使用控件QLabel

mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H


#include <QMainWindow>

#include <QFileDialog>

#include <QImage>

#include <QLabel>

#include <QTextCodec>

#include <QMessageBox>

#include <opencv2/opencv.hpp>

namespace Ui {

class MainWindow;

}


class MainWindow : public QMainWindow

{

Q_OBJECT


public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();


private:

Ui::MainWindow *ui;

cv::Mat image;


private slots:


void DisplayMat(cv::Mat image);

void on_pushButton_clicked();

};


#endif // MAINWINDOW_H

 

mainwindow.cpp

 

#include "mainwindow.h"

#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);


}


MainWindow::~MainWindow()

{

delete ui;

}


void MainWindow::DisplayMat(cv::Mat image)

{

cv::Mat rgb;

QImage img;

if(image.channels() == 3)

{

cvtColor(image,rgb,CV_BGR2RGB);

img = QImage((const unsigned char*)(rgb.data),

rgb.cols,rgb.rows,rgb.cols*rgb.channels(),//rgb.cols*rgb.channels()可以替换为image.step

QImage::Format_RGB888);

}

else

{

img = QImage((const unsigned char*)(image.data),

image.cols,image.rows,rgb.cols*image.channels(),

QImage::Format_RGB888);

}

ui->labelimage->setPixmap(QPixmap::fromImage(img).scaled(ui->labelimage->size()));//setPixelmap(QPixmap::fromImage(img));

ui->labelimage->resize(ui->labelimage->pixmap()->size());//resize(ui->label->pixmap()->size());

}


void MainWindow::on_pushButton_clicked()

{

QString filename = QFileDialog::getOpenFileName(this,

tr("Open Image"),".",tr("Image File (*.jpg *.png *.bmp)"));

QTextCodec *code = QTextCodec::codecForName("gb18030");

std::string name = code->fromUnicode(filename).data();//filename.toAscii().data()

image = cv::imread(name);

if(!image.data)

{

QMessageBox msgBox;

msgBox.setText(tr("Image Data Is Null"));

msgBox.exec();

}

else {

DisplayMat(image);

}

}


main.cpp

#include "mainwindow.h"

#include <QApplication>


int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;


w.show();


return a.exec();

}

显示结果如下:

 

注意事项:

这个过程中要注意几点:

第一:建立Qt QWidgets Application工程

第二:在ui界面上添加一个QLabel控件,并改名字为labelimage

在ui界面上添加一个Button按钮,点击右键,转到槽,选择第一个 clicked(),确定,就会生成一个按钮的响应函数即:

	on_pushButton_clicked()

第三:配置工程遇到的相关问题,比如, QT  += core gui widgets

 

添加LIBS

添加INCLUDEPATH

等等

 

 

————————————————————————————————————————————————————————————————————————

当然,不用OpenCV更方便可以显示出来

如下

在mainwindow.cpp中

#include "mainwindow.h"

#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QImage myImage;

myImage.load("lena.jpg");

ui->labelimage->setPixmap(QPixmap::fromImage(myImage).scaled(ui->labelimage->size()));

}


MainWindow::~MainWindow()

{

delete ui;

}


且在ui界面中添加QLabel控件,并拖动设置其大小即可,mainwindow.h中添加#include<QImage>。其他不要变化!

 

显示结果如下。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值