QT+VS+Opencv制作界面显示图片

新建工程

打开VS2019,文件->新建->项目,然后选择:模板->Visual C++ -> Qt -> Qt GUI Application,新建工程。
在这里插入图片描述
然后创建然后创建QT GUI工程,一般按默认就好,根据需要可勾选其他的。
在这里插入图片描述

属性页的头文件配置(qt和Opencv)

打开项目的管理器属,右键选择X64的属性,如下图,进行配置

在这里插入图片描述
项目-属性-VC++目录,这个就跟配置opencv一样的
(1)设置包含目录C:\Qt\Qt5.9.6\5.9.6\msvc2015_64\include
在这里插入图片描述

(2)设置库目录C:\Qt\Qt5.9.6\5.9.6\msvc2015_64\include
在这里插入图片描述

绘制ui

如下图,点击打开QTGUIWen.ui
在这里插入图片描述
便会进入QT designer设计界面,拖动左边的按钮到界面上设计
如下所示,使用了两个Push button,两个label,两个Scroll Area(就是显示框)
在这里插入图片描述
可以根据需求修改控件的名字等属性,如下
在这里插入图片描述

4.编辑QtGuiWen.h文件

代码如下,如果按格式on_控件名_clicked命名函数,QT会默认完成函数和按钮动作的链接,如果不这样命名的话就必须得去设置信号槽函数

#pragma once
 
#include <QtWidgets/QMainWindow>
#include "ui_QtGuiWen.h"
#include<QGraphicsScene>  
#include<QGraphicsView>                   //graphicsview类
#include<opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>  //opencv申明
#include <qfiledialog.h>                //getopenfilename 类申明
#include <qlabel.h>                     //label类
using namespace cv;
 
 
class QtGuiWen : public QMainWindow
{
	Q_OBJECT
 
public:
	QtGuiWen(QWidget *parent = Q_NULLPTR);
	~QtGuiWen(); //析构函数
 
//添加槽函数
private slots:
	void on_OpenFig_clicked();    
	//按格式on_控件名_clicked命名函数,QT会默认完成函数和按钮动作的链接,如果不这样命名的话就去设置信号槽函数
	void on_Progress_clicked();
 
private:
	Ui::QtGuiWenClass ui;
	Mat image;
	QLabel *label;
	QLabel *label_2;
 
};

5.编辑信号槽

编辑信号槽是为了实现按钮的动作和函数的连接
在这里插入图片描述

6.编辑QtGuiWen.cpp文件

#include "QtGuiWen.h"
 
using namespace cv;
using namespace std;
 
QtGuiWen::QtGuiWen(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
}
 
QtGuiWen::~QtGuiWen()
{
    //析构函数
}
 
void QtGuiWen::on_OpenFig_clicked()
{
	QString filename;
	filename = QFileDialog::getOpenFileName(this,
		tr("选择图像"),
		"",
		tr("Images (*.png *.bmp *.jpg *.tif *.GIF )"));
	if (filename.isEmpty())
	{
		return;
	}
	else
	{
		//QImage* img = new QImage;
 
		//if (!(img->load(filename))) //加载图像
		//{
		//	QMessageBox::information(this,
		//		tr("打开图像失败"),
		//		tr("打开图像失败!"));
		//	delete img;
		//	return;
		//}
 
		string str = filename.toStdString();  // 将filename转变为string类型;
		image = imread(str);
		//image=imread(fileName.toLatin1().data);
		cvtColor(image, image, CV_BGR2RGB);
		cv::resize(image, image, Size(300, 200));
		QImage img = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB888);
 
		label = new QLabel();
		label->setPixmap(QPixmap::fromImage(img));
		label->resize(QSize(img.width(), img.height()));
		ui.scrollArea->setWidget(label);
 
	}
}
 
void QtGuiWen::on_Progress_clicked()
{
	flip(image, image, 4);//反转函数 0 上下反转;整数,水平发转;负数,水平垂直均反转
	QImage img1 = QImage((const unsigned char*)(image.data), image.cols, image.rows, QImage::Format_RGB888);
	label_2 = new QLabel();
	label_2->setPixmap(QPixmap::fromImage(img1));
	label_2->resize(QSize(img1.width(), img1.height()));
	ui.scrollArea_2->setWidget(label_2);
}

运行结果如下:
在这里插入图片描述

7,遇到问题

问题 1
程序运行到 cvtColor(image, image, CV_RGB2RGBA);处产生中断
解决:

#include<opencv2\imgproc\types_c.h>

问题2:
找不到Microsoft.Cpp.x64.user
解决
添加三个文件
在这里插入图片描述

下面附上三个文件的内容,只要按照上面目录,把文件放进去就可以了。
1)Microsoft.Cpp.ARM.user.props

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

2)Microsoft.Cpp.Win32.user.props

 <?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup />
  <ItemGroup />
</Project>

3)Microsoft.Cpp.x64.user.props

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets">
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup>
    <IncludePath>D:\opencv\opencv\build\include;D:\opencv\opencv\build\include\opencv2;$(IncludePath)</IncludePath>
    <LibraryPath>D:\opencv\opencv\build\x64\vc14\lib;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup>
    <Link>
      <AdditionalDependencies>opencv_world411d.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>


版权声明:本文为qq_45070929原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。