VS2010+OpenCV2.4+Qt4.0:利用Label显示图像
分享给有需要的人,代码质量勿喷。
一、头文件.h
#ifndef XJIMAGE_H
#define XJIMAGE_H
#include <QtGui/QMainWindow>
#include "ui_xjimage.h"
#include <iostream>
#include <QFile>
#include <QFileDialog>
#include <QString>
#include <QTextCodec>
#include <QTranslator>
#include <QLabel>
#include <QMovie>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
class xjImage : public QMainWindow
{
Q_OBJECT
public:
xjImage(QWidget *parent = 0, Qt::WFlags flags = 0);
~xjImage();
private slots:
void xjOpenImage();
private:
Ui::xjImageClass ui;
QString xjOriginalPath;
Mat xjOriginalImage;
};
#endif // XJIMAGE_H
二、源文件.cpp
#include "xjimage.h"
xjImage::xjImage(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
//
connect(ui.actionOpen, SIGNAL(triggered()), this, SLOT(xjOpenImage()));
}
xjImage::~xjImage()
{
}
void xjImage::xjOpenImage()
{
xjOriginalPath = QFileDialog::getOpenFileName(this, tr("打开图像"), "",
tr("静态图(*.png *.jpg *.jpeg *.bmp);;GIF(*.gif)"));
QFileInfo xjFileInfo(xjOriginalPath);
QString xjExtension = xjFileInfo.suffix();//扩展名
Qt::CaseSensitivity cs = Qt::CaseInsensitive;//不区分大小写
if (xjExtension.compare("gif", cs) == 0)
{
//GIF类型
QMovie *xjMovie = new QMovie(xjOriginalPath);
ui.label->setMovie(xjMovie);
xjMovie->start();
}
else
{
xjOriginalImage = cv::imread(xjOriginalPath.toAscii().data());
//xjOriginalImage = cv::imread(xjOriginalPath.toLocal8Bit().toStdString());
Mat xjRGB;
QImage xjImage;
if (xjOriginalImage.channels() == 3)
{
cvtColor(xjOriginalImage, xjRGB, CV_BGR2RGB);
xjImage = QImage((const unsigned char*)(xjRGB.data), xjRGB.cols, xjRGB.rows,
xjRGB.cols*xjRGB.channels(), QImage::Format_RGB888);
}
else
{
xjImage = QImage((const unsigned char*)(xjOriginalImage.data),
xjOriginalImage.cols, xjOriginalImage.rows,
xjOriginalImage.cols*xjOriginalImage.channels(),
QImage::Format_RGB888);
}
//自适应大小
xjImage = xjImage.scaled(ui.label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui.label->setPixmap(QPixmap::fromImage(xjImage));
ui.label->resize(ui.label->pixmap()->size());
}
}
OpenCV配置有问题的可以参考这个:OpenCV2.4配置
解决中文乱码:这个貌似可以解决中文乱码