视觉里程计05 vs环境下Qt界面通过opencv显示图像

视觉里程计05 vs环境下Qt界面通过opencv显示图像

配置环境

基于上一篇中的界面程序,将图像的显示通过opencv实现,将opencv的环境加入至qt程序中,注意qt默认为release环境。

  • 属性->VC++目录->包含目录中添加

    • \build\include
    • \build\include\opencv
    • \build\include\opencv2
  • 属性->VC++目录->库目录中添加

    • \opencv\build\x64\vc14\lib
  • 属性->链接器->输入->附加依赖项中添加

    • opencv_world320d.lib
    • opencv_world320.lib

代码修改

QtGuiApplication1.h中加入声明

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtGuiApplication1.h"
#include <opencv.hpp>

using namespace cv;
class QtGuiApplication1 : public QMainWindow
{
	Q_OBJECT

public:
	QtGuiApplication1(QWidget *parent = Q_NULLPTR);

private:
	Ui::QtGuiApplication1Class ui;
	//这里新加入的槽响应函数
	private slots:
	void func();
};
static QImage Mat2QImage(Mat& image);

QtGuiApplication1.cpp中加入实现

#include "QtGuiApplication1.h"
#include <opencv.hpp>

using namespace cv;

QtGuiApplication1::QtGuiApplication1(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	//建立信号-槽链接
	connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(func()));
}
//响应函数的具体操作
void QtGuiApplication1::func()
{
	ui.pushButton->setText(tr("OK"));
	ui.label->setPixmap(QPixmap("./pic.jpg"));
	QGraphicsScene *scene = new QGraphicsScene;
	//QImage *image = new QImage();
	//image->load("./pic.jpg");
	//scene->addPixmap(QPixmap::fromImage(*image));
	//ui.graphicsView->setScene(scene);
	Mat img = imread("pic.jpg");
	//MAT转换为Qt的格式
	QImage cvimg = Mat2QImage(img);
	scene->addPixmap(QPixmap::fromImage(cvimg));
	ui.graphicsView->setScene(scene);
}

static QImage Mat2QImage(Mat& image)
{
	QImage img;

	if (image.channels() == 3) {
		cvtColor(image, image, CV_BGR2RGB);
		img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
			image.cols*image.channels(), QImage::Format_RGB888);
	}
	else if (image.channels() == 1) {
		img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
			image.cols*image.channels(), QImage::Format_ARGB32);
	}
	else {
		img = QImage((const unsigned char *)(image.data), image.cols, image.rows,
			image.cols*image.channels(), QImage::Format_RGB888);
	}

	return img;
}

界面同上一篇,这里的Mat2QImage实现将opencv的Mat图像转换为Qt的Qimage,从而实现界面显示,左侧为传统的label显示,右侧则为graphicsView转换opencv的Mat图像的结果

posted @ 2017-10-21 23:56  回归的世界线  阅读(427)  评论(0编辑  收藏  举报