Qt+OpenCV:打开显示图像

9 篇文章 0 订阅

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配置 

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值