OpenCV(2):用Vs+Qt制作一个显示两张图片的窗口程序

因为之前接触过Qt,所以为更方便观察,决定用Qt+Vs+OpenCV做一个比较图像差异性的小程序。

在Vs写Qt的程序很方便,只要在属性表中加入之前写好的数学prop文件即可。

在查询了一些资料后写出一个简单的窗口程序。

这是我主要参考的链接,但他的槽函数有一些问题,会选择2次图片:https://blog.csdn.net/guanzhen3657/article/details/81812566

头文件:

#pragma once


//在头文件前面加上下面几行代码

#ifdef WIN32  

#pragma execution_character_set("utf-8")  

#endif


#include 
#include 
#include "ui_QtGuiApplication.h"
#include  
#include                   //graphicsview类
#include
#include 
#include   //opencv申明
#include                 //getopenfilename 类申明
#include          

using namespace cv;

class QtGuiApplication : public QMainWindow
{
	Q_OBJECT

public:
	QtGuiApplication(QWidget *parent = Q_NULLPTR);

private slots:
	void on_OpenFile1_clicked();
	void on_OpenFile2_clicked();


private:
	Ui::QtGuiApplicationClass ui;
	cv::Mat image_1,image_2;						//图像
	QLabel *label_1;
	QLabel *label_2;
};

cpp文件:

#include "QtGuiApplication.h"

using namespace cv;
using namespace std;



QtGuiApplication::QtGuiApplication(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
}


void QtGuiApplication::on_OpenFile1_clicked()
{
	QString filename = QFileDialog::getOpenFileName(this,
		tr("选择图片"),
		"",
		tr("Images(*.png *.bmp *.jpg *.tif *.GIF)"));
	if (filename.isEmpty())
	{
		return;
	}
	else
	{
		string str = filename.toStdString();  // 将filename转变为string类型;		
		image_1 = imread(str);				
		cvtColor(image_1, image_1, CV_BGR2RGB);
		cv::resize(image_1, image_1, Size(300, 200));
		QImage img_1 = QImage((const unsigned char*)(image_1.data), image_1.cols, image_1.rows, QImage::Format_RGB888);
		label_1 = new QLabel();		
		label_1->setPixmap(QPixmap::fromImage(img_1));		
		label_1->resize(QSize(img_1.width(), img_1.height()));		
		ui.Picture1->setWidget(label_1);

	}

}

void QtGuiApplication::on_OpenFile2_clicked()
{
	QString filename = QFileDialog::getOpenFileName(this,
		tr("选择图片"),
		"",
		tr("Images(*.png *.bmp *.jpg *.tif *.GIF)"));
	if (filename.isEmpty())
	{
		return;
	}
	else
	{
		string str = filename.toStdString();  // 将filename转变为string类型;		
		image_2 = imread(str);
		//image=imread(fileName.toLatin1().data);		
		cvtColor(image_2, image_2, CV_BGR2RGB);
		cv::resize(image_2, image_2, Size(300, 200));
		QImage img_1 = QImage((const unsigned char*)(image_2.data), image_2.cols, image_2.rows, QImage::Format_RGB888);
		label_1 = new QLabel();
		label_1->setPixmap(QPixmap::fromImage(img_1));
		label_1->resize(QSize(img_1.width(), img_1.height()));
		ui.Picture2->setWidget(label_1);
	}
}

效果如下:

OpenCV(2):用Vs+Qt制作一个显示两张图片的窗口程序_第1张图片

 

OpenCV(2):用Vs+Qt制作一个显示两张图片的窗口程序_第2张图片

你可能感兴趣的:(图像处理,Qt基础)