Qt+OpenCV:打开显示图像

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());
		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配置 

解决中文乱码:这个貌似可以解决中文乱码

发布了63 篇原创文章 · 获赞 58 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/xinjiang666/article/details/85129399