zoukankan      html  css  js  c++  java
  • 视觉里程计05 vs环境下Qt界面通过opencv显示图像

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

    配置环境

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

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

      • uildinclude
      • uildincludeopencv
      • uildincludeopencv2
    • 属性->VC++目录->库目录中添加

      • opencvuildx64vc14lib
    • 属性->链接器->输入->附加依赖项中添加

      • 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图像的结果

  • 相关阅读:
    bzoj3786 星系探索
    [JSOI2008]火星人
    [NOI2005]维护数列
    [POI2008]砖块Klo
    郁闷的出纳员
    [HNOI2002]营业额统计
    [BZOJ1651][Usaco2006 Feb]Stall Reservations 专用牛棚
    [BZOJ2124]等差子序列
    [BZOJ3038]上帝造题的七分钟2
    [BZOJ1711][Usaco2007 Open]Dining吃饭
  • 原文地址:https://www.cnblogs.com/RegressionWorldLine/p/7707445.html
Copyright © 2011-2022 走看看