【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片

这篇具有很好参考价值的文章主要介绍了【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料

1、Qt Creator快速入门_第三版__霍亚飞编著
2、《Qt+OpenCV显示图片(Mat转QImage然后显示在QLabel上)》

输出材料

https://gitee.com/hiyanyx/qt5.14-cpp_-empty_-project/tree/Study2023-section5/

git分支“Study2023-section5”

新增文件布局

新增ui类

c.cpp  
c.h
c.ui

新增使用opencv读取图片的普通类

A.cpp
A.h

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

具体步骤

1.1 创建新增使用opencv读取图片的普通类

为了更加方便,可在QT 中添加普通类,这样会自动生成一些模板语句,方便使用。然后再A.h 在引入opencv 头文件#include <opencv2/opencv.hpp>。在成员中增加 图片路径成员image_name和 cv的图像数据结构Mat 的成员img1。以及增加了成员函数int test()

/*
 * =========================== A.h ==========================
 *                                        CREATE --
 *                                        MODIFY -- 
 * ----------------------------------------------------------
 */
#ifndef CLASS_A_H
#define CLASS_A_H

#include "innDebug.h"
#include <opencv2/opencv.hpp>


class A{
public:
    A( int data_ ): data(data_){
        debug::log( "class A: Constructor" );
    }

    ~A(){
        debug::log( "class A: Destructor" );
    }

    inline int get_data()const noexcept{
        return this->data;
    } 

    int test();
    cv::Mat img1;

private:
    int data;
    std::string image_name = "/var/GPU1NFSshare/LaneDetection_End2End/DATASET/images/1.jpg";

};

void print_A_data( const A &a_ );

#endif

然后修改A.cpp 文件,撰写成员test()函数:用opencv 读取图片。

/*
 * =========================== A.cpp ==========================
 *                                        CREATE --
 *                                        MODIFY -- 
 * ----------------------------------------------------------
 */
#include "A.h"
#include "pch.h"


void print_A_data( const A &a_ ){
    debug::log( "a.data = {}", a_.get_data() );
}

int A::test()
{
    std::string image_name = "1.jpg";
    //this pointer can distinguish same name var
    debug::log(this->image_name);
    this->img1 = cv::imread(this->image_name, -1);
    if (!this->img1.data ) {
        debug::log("fail to imread");
        return -1;
    }
    else
    {
        //cv::imshow("source image", img1);
        //cv::waitKey(1);
        debug::log("success to imread");
    }

    return 1;
}

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

2.1 创建c.ui文件

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

进入可视化设计界面。默认情况中间的主设计区下已经有一个QMainWindow和QWidget的对象。我们需要将采集到图像显示到一个QLabel的部件上,从右侧的部件列表的“DisplayWidget”中选择“Label”部件拖动到中间.

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

1.2 创建c类

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

在c.cpp 中写下在c.ui 在显示图片的语句。主要是将Mat对象转为QImage对象并使用Qt显示出来的步骤如下:

1.将使用OpenCV imread函数加载一张图片

2.将Mat转为QImage

3.将QImage转为QPixmap

4.将QPixmap放到QLabel上并显示出来

首先导入头文件

#include <QImage>
#include "A.h"

然后在c.cpp 写

#include "c.h"
#include "ui_c.h"

c::c(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::c)
{
    ui->setupUi(this);

	//初始化A类,实例化b
    A b(0);
    //在b中进行图片读取
    b.test();
    // Mat convert to QImage
    QImage dst = QImage(b.img1.data,b.img1.cols,b.img1.rows,b.img1.step,QImage::Format_BGR888);
    // 在ui中显示图像
    ui->label->setPixmap(QPixmap::fromImage(dst));
}

c::~c()
{
    delete ui;
}

补充讲解:ui文件是什么?

可以理解:ui 就是一种可以自动生成 h 头文件的可视化编程工具。与自己写QT 可视化界面代码的效果是一模一样的。
【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv

我们尝试使用代码写一个界面aboutme界面,而不用ui设计工具。

1、 头文件中引入

#include <QtWidgets/QPushButton>
#include <QMessageBox>

2、 在c类,设计abouteme 函数,申明函数QPushButton *about_button;,例如下列头函数的书写:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtWidgets/QPushButton>
#include <QMessageBox>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void aboutme();


private:
    Ui::MainWindow *ui;
    QPushButton *about_button;

};
#endif // MAINWINDOW_H

3、然后在cpp 中撰写详细代码

void MainWindow::aboutme(){
    QMessageBox *about_message=new QMessageBox(this);
    about_message->setWindowTitle("??");
    about_message->setText("name yanyx\n"
                           "QQ \n"
                           "date");
    about_message->exec();
}

4、在c 类引入button 按钮,并关联aboutme 函数

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // aboute me button
    about_button=new QPushButton(this);
    connect(about_button,SIGNAL(clicked()),this,SLOT(aboutme()));
    about_button->setText("about");
    about_button->setGeometry(8,8,90,30);

}

效果:

【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片,嵌入式数据结构C++工具链,qt,ui,opencv文章来源地址https://www.toymoban.com/news/detail-732629.html

到了这里,关于【QT开发(5)】0919-QT里面新增ui类,新增使用opencv读取图片的普通类,在ui类中显示图片的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT添加使用图片与UI资源

    1.1 添加新文件 1.2 添加QT - QT Resources File 【UI资源文件】 1.3 命名资源包名称 并 添加到项目文件 1.4 .pro 文件发生变化 += art.qrc 1.5 点击qrc文件,添加现有文件 - 添加进去的图片文件可以进行正常引用。 1.6 修改样式表,正常添加图片即可 2.1 添加新文件 2.2 添加 QT Designer Form 设计

    2024年01月17日
    浏览(40)
  • ubuntu22.04,ros2使用自带opencv读取图片

    从网上找了很久的ros2如何使用自带的opencv库或者自定义安装opencv库的教程,自己看的云里雾里的,跟着配置走下来依旧是不能使用,出现的最多的问题,就是找不到头文件或者undefined reference to \\\'cv::imread(std::cxxll::basic stringchar, std::char traits, std::allocator const, int)\\\'这一类的未定义

    2024年02月10日
    浏览(49)
  • 3. QT环境下使用OPenCV操作图像数据(读取、保存、尺寸调节、色彩变换等)

    1. 说明 图像加载完成后,如果需要显示出来,需要使用 imshow 函数,在QT框架下,可以不使用这个函数。本文的操作都是将读取到的图像数据绘制到一个 QLabel 控件上即可。 使用opencv自带的显示函数示例:

    2024年02月09日
    浏览(41)
  • 4. QT环境下使用OPenCV(视频或摄像头读取显示在QLabel控件上)

    1. 说明 在用opencv处理图像时,图像的来源大部分情况下是从视频中读取过来的,视频可以是本地保存的视频,也可以是本地摄像头或者网络摄像头实时拍摄的视频。 效果展示: opencv读取视频 2. 具体操作 关于视频的读取,实际上也是从视频中将每一帧图像加载后,显示到Q

    2024年02月04日
    浏览(51)
  • vue element ui el-table单元格里面显示多张图片点击并放大

    效果图: 一个单元格里面显示三张图片,并且点击图片可以放大。 1.将图片v-for渲染出来,具体上代码 注:el-popover的属性   2.单元格里能够展示多张图片,需要在请求的接口里面做处理 以上两步,就可以实现上面的功能。

    2024年02月07日
    浏览(48)
  • python socket编程7 - 使用PyQt6 开发UI界面新增实现UDP server和client单机通讯的例子

    在第五篇中,简单实现了命令行下的 TCP/UDP server和client的单机通讯。 在第六篇中,实现了PyQt6开发界面,TCP协议实现的单机server和client的通讯功能。 这一篇,在第六篇的基础上,增加了UDP server和client的单机通讯功能。 1、UDP Server 界面实现服务配置和数据提供 2、UDP Server封装

    2024年02月19日
    浏览(46)
  • OpenCV读取图片

    第一种方式:直接通过Anaconda读取、显示 ①读取有色图片 ②读取灰度图片 ③对有色图片的一些其他操作截图 第二种方式:通过argparse模块读取、显示 ①首先介绍一下argparse模块的使用方法 在Pycham中运行 运行以上代码 (会报错 但不用管)如下图 点击Terminal, 然后ls查看文件–

    2024年02月05日
    浏览(35)
  • Qt教程 — 2.1 如何使用Qt Designer 开发UI程序

    目录 1 Qt Designer简介 2 编辑UI界面 2.1 在 UI 界面添加一个Label 2.2 在 UI 界面添加一个按钮 2.3 在 UI 文件里连接信号与槽 方法一:通过信号和槽编辑栏 方法二:通过导航区信号和槽编按钮 方法三:通过跳转编辑代码实现—通过按钮输出文字 Qt Designer 是属于 Qt Creator 的一个功能

    2024年03月22日
    浏览(52)
  • C++ 结合 opencv读取图片与视频

    2024年02月06日
    浏览(40)
  • QImage加载opencv读取的图片出错

    今天写opencv的时候, 突然发现一件很奇怪的事情, 用摄像头读取的图片, 用QImage加载的时候传入img.data, 一切都很正常, 但是如果我是从保存的图片读取灰度图, 传入img.data, 它会告诉我QImage不能传入memoryview, 但是我打了断点, 也打印过, 它们确实都是memoryview, 而且

    2024年04月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包