Qt之如何使用matlab库对mat文件进行读写操作

Qt+opencv+matlab opencv读写高光谱 .mat文件 之前用c++处理高光谱数据都是先将数据在matlab里转换为.yml格式再用opencv读取,这样做很麻烦而且效率很低,最近研究混编后开始抛弃以前那些蠢方法。这里分享一下用opencv读写高光谱.mat文件的经验。 1.增加工作路径opencv的配置这里不再赘述,这里直接讲如何配置matlab库。打开Qt工程在pro里增加matlab的库目录。 INCLUDEPATH += D:/MATLAB/R 阅读详情

一、简述

分享一下在Qt使用matlab库进行一些操作,至于什么是matlab,百度一下,你就知道。matlab中有很多写好的库函数可以方便使用,想使用matlab自己的数据文件.mat文件也需要引用matlab的相关库函数。

具体有两种用法:

  • 1、在matlab中写好相关函数,发布为dll供Qt使用
  • 2、直接在Qt中使用matlab库函数

两种方法都有各自优缺点,其一因为在matlab软件中直接编写,可方便看到参相关数,运行结果,还可以直接看到生成数据的相关曲线图。但是只能运行已经写好的dll,修改代码不方便。

其二在Qt中直接调用,也算是非常方便,想怎么用就直接写就行了,下面中我会分享一个利用matlab库对它的.mat数据文件进行读和写的例子,但是.mat文件呢,一般编辑器是打不开的,要想看到具体的数据,是否写的对不对啊,读取的对不对啊还是得用matlab软件打开进行查看。

大家可以针对自己的需求自行选择操作方式。今天先讲述一下在Qt中如何直接使用matlab库进行读、写的操作。


二、代码之路

  • 第一步:下载matlab软件
    可以去官网进行下载,然后进行安装,装完在网上找破解软件即可使用(或者先试用一个月)。安装完毕之后会在系统环境变量Path中添加以下路径,但是真正依赖的dll文件都在 F:\Program Files\MATLAB\R2018b\bin\win64 目录。

在这里插入图片描述


  • ** 第二步:新建工程,配置matlab环境**

注 : 以下为VS下配置的环境示例,QCreator直接在pro文件中安照下面步骤添加相关代码进行引用。

(1)、配置引用头文件目录
在这里插入图片描述
(2)、配置相关依赖库函数

配置库目录
在这里插入图片描述
配置引用的库,这里只需用到读写操作,所有只需要libmat.lib以及libmx.lib即可。
在这里插入图片描述
(3)、代码之路

保存mat文件

void TestMatlabLib::saveMatFile()
{
    double *out = new double[50];
    for (int i = 0; i < 50; i++)
    {
        // 生成随机数;
        QTime time;
        time = QTime::currentTime();
        qsrand(time.msec() * 1000);
        QThread::msleep(2);
        out[i] = qrand() % 1000;
    }

    MATFile *OutFile = NULL;
    mxArray *pMxArray = NULL;

    // 打开mat文件;
    // 如果文件不存在,则创建一个空文件;
    OutFile = matOpen(QString("data.mat").toLatin1(), "w");
    // 创建 5*10 的矩阵数据;(mat文件数据是 X * X 的 矩阵);
    pMxArray = mxCreateDoubleMatrix(5, 10, mxREAL);
    // 数据内存拷贝;
    memcpy((void *)(mxGetPr(pMxArray)), (void *)out, sizeof(double) * 50);
    // 将矩阵数据存入到mat文件中;
    matPutVariable(OutFile, "var", pMxArray);
    // 关闭文件;
    matClose(OutFile);
}

// 写数据到mat文件

 // 打开mat文件;
    MATFile *pmatFile = matOpen(QString("data.mat").toLatin1(), "r");
    if (pmatFile == NULL)
    {
        return;
    }

    // 获取文件中变量var;
    mxArray* Array1 = matGetVariable(pmatFile, "var");
    matClose(pmatFile);

    // 获取矩阵数据行数;
    int row = mxGetM(Array1);
    // 获取矩阵数据列数;
    int column = mxGetN(Array1);
    // 获取数据;
    double *Data = (double*)mxGetData(Array1);

    for (int i = 0; i < row * column; i++)
    {
        qDebug() << Data[i];
    }

保存文件,我们可以用matlab软件打开,以下是调用saveMatFile函数生成的mat文件。
注意:mat文件中的数据存储是一列一列存储的。
在这里插入图片描述


尾

以上讲述了Qt中使用matlab库读取/存储 .mat文件。
有人可能会问,matlab这么大,可不可以不安装啊,可以,需要两步,一是把需要的头文件和lib文件放到自己的工程目录下, 然后引用该工程下的相关文件,第二把相关dll拷贝到生成的exe同级目录即可。

C++ 读写Matlab的mat文件的注意事项 通过Max文件,我们可以用Matlab调用C的函数。有时候我们在进行数据处理的时候,希望通过Matlab分析的数据存储成Mat格式。然后用C++来读取这个Mat文件。我们可以将这个Mat文件成为模型文件。在OpenCV中,模型文件使用.xml存放的。     首先我们得配置VS工程,配置的方法请见http://blog.csdn.net/left_la/article/details/820 阅读详情

相关推荐

c++读写txt文件 matlab读mat文件

#include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main() { int a[10]; ifstream in("1.txt");//读入 for(int i=0;i&lt;10;i++) in&gt;&gt;a[i]; for(int i=0;i&lt;10;i++) cou...

xhyan523的博客 711

C++(Qt)读取.mat文件(可以读取多级变量)

全网最全C++读取.mat文件,从安装环境和配置环境变量,然后再到需要的SDK库,再到代码详细解读。需要源码或者有问题可以私up哈,新人作者希望一件三联滴

进击的小程序员 2547

Matlab算法移植到Qt的两种姿势:文件交互 vs 动态链接库性能对比(以多项式拟合为例)

本文深入对比了将Matlab算法移植到Qt应用的两种主流混合编程方案:文件交互与动态链接库。以多项式曲线拟合为例,从架构耦合度、通信开销、实时性及部署复杂度等维度进行剖析,并结合性能测试数据,为开发者在不同应用场景下选择最佳集成方案提供了清晰的决策指南。

study的专栏 730

QT Creator使用matlab库文件读取.mat文件数据

QT Creator使用matlab库文件读取.mat文件数据一、环境配置二、关于编程介绍三、关于使用函数的介绍1:关于假设数据类型介绍2:关于使用函数介绍 一、环境配置 第一步先点开我的电脑属性,然后进入如上界面,之后点开高级系统设置,之后点开环境变量 在之后点开Path 找到matlab安装目录下面的这几个文件添加进去 再之后配置QT,在pro文件后面添加如下几行代码 INCLUDEPATH += D:\MATLAB\matlab\extern\include\ LIBS += -LD:\MATL

尘埃飞舞 5080

mat 转 Qimage

QImage FitnessMainDlg::MatImageToQt(const cv::Mat &src) { //CV_8UC1 8位无符号的单通道---灰度图片 if (src.type() == CV_8UC1) { //使用给定的大小和格式构造图像 //QImage(int width, int height, Format format) QImage qImage(src.cols, src.rows, QIm.

A121649982的专栏 623

Matlab+Qt开发笔记:使用Qt打开MAT文件并显示读取的数据

在本文中,我们将探讨如何使用Qt框架来打开MAT文件并显示读取的数据。我们将使用Qt来实现一个简单的界面,用户可以选择MAT文件并查看其中的数据。上述代码创建了一个简单的窗口,包含一个选择文件的按钮和一个用于显示数据的文本框。选择文件后,代码将使用Matlab引擎读取MAT文件,并将数据显示在文本框中。通过调用Matlab引擎,我们可以在Qt应用程序中轻松读取和处理MAT文件中的数据。注意:在上述代码中,我们使用了Matlab引擎的功能来读取MAT文件。这将链接Matlab引擎库到我们的Qt项目中。

DevScribe的博客 963

Matlab+Qt开发笔记(二):Qt打开mat文件显示读取的数据

本篇读取mat文件并显示。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 3万+

Qt报错:无法解析外部命令,解决办法

是这样的,我是一个Qt小白,昨晚就简简单单自定义了一个按钮,就出现下面的问题。 **widget.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl MyPushButton…**具体错误提示很长来着,,, 直接上解决办法吧: 第一步: 删掉工程文件目录中Debug中的所有文档。 第二步: 点击,Qt Creator菜单栏中的构建,在其下拉菜单中,点击...

kangjielearning的博客 3240

QT 中如何保存matlab 能打开的.mat数据矩阵!

Windows 上安装并使用MATIO库来保存 MATLAB 格式的.mat。

weixin_43608857的博客 1539

matIo库及.mat数据格式介绍

matIo库及.mat数据格式介绍 .mat 是 MATLAB 软件的标准二进制数据存储格式,用于保存变量、矩阵、数组、结构体等数据类型。其名称源于 “MATLAB Data” 的缩写,最初设计为高效存储和加载 MATLAB 环境中的数据,后来逐渐成为科学计算、工程分析等领域的通用数据格式之一。

热土程序园,利他愉己~ 1448

FPGA:UART串口接收(高干扰情况)

在上一篇文章中介绍过UART串口接收模块,其中一个需要优化的方向就是在高干扰情况下,如何实现可靠的UART串口接收任务。

weixin_50164178的博客 1672

Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版本),安装matlab2020a版本(该版本是vs 14版本的,每年matlab上半年发布a版本,下半年发布b版本)。安装请自行百度,下载,解压,安装都比较费时间。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 3万+

大华/华睿工业相机(摄像头)链接电脑,并用OpenCV打开

睿科是大华旗下机器视觉子公司,现在工业相机一般是华睿在产,要下载驱动程序,要到华睿官网哪里下载。由于我的电脑没有摄像头,所以摄像头序列化为0,电脑的第一个摄像头默认为0,序列号是0,1,2,3……,你是什么接口连接的就选择什么, 建议直接全选。我这里选择第二个,下载后点击安装,的你要点击识别右侧设置,设置。这个过程很简单,故不赘述。打开你的设备会在右边显示。

qq_48050838的博客 1万+

libmatio开发笔记(一):matlab文件操作libmatio库介绍,编译和基础Demo

matio软件包含一个用于读写MATLAB MAT fles的库。libmatio库是创建/打开MAT fles和写入的主要接口。matio库可以编写版本5的MAT fles,版本5的fles带有可变压缩(如果使用zlib构建),以及支持引入的HDF5格式MAT file,即MATLAB 7.3版。

长沙红胖子 Qt・西安|省级科研团队从业背景,深耕双一流体系高精尖技术配套研发|剥离高精尖机理,沉淀高端特种行业领域 Qt 工程化落地经验|博文仅分享通用技术总结,输出公开普适工程思路。 3万+

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 686

couldn‘t upgrade db schema: insert into ACT_GE_PROPERTY values (‘common.sche[已解决]

启动整合了flowable的项目,初始化时报错。flowable没有自动建表, 原因 测试数据库版本是MySQL5.7。经过查询和尝试,原因是:在这个数据库里面,已经有一个数据库里面有activiti的这些表了,它检索的时候全库检索查到它了,所以flowable不去建表了,但是我们指定的这个schema里卖弄还是空的,所以它报了找不到表。解决方法:mysql的链接上加上参数如下,让本schema成为默认的schema。...

JavaPub 6009

[Qt][Matlab]混编设置/Qt读取并显示三维张量mat/高光谱处理系统

1、Qt下载 2、Matlab下载 3、Qt环境配置 4、mat的读取 5、mat的显示

qq_41221520的博客 1705

rknn-toolkit推理yolov5-face.rknn模型--python代码

import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THR.

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3079

gl函数在qt中无法使用_在R中使用Matlab函数

R, MatlabMATLAB是一款商业数学软件, R是一个拥有庞大工具库的数据统计、建模、可视化分析软件.R 不仅支持C/C++, python代码的运行和工程移植, 也支持在R中使用MATLAB命令,模拟MATLAB环境.其开源和覆盖领域广泛被学术、教育、研究广泛使用.matlab包在R中使用matlab包.发布日期:2014年1安装R包install.packages("mat...

weixin_39920397的博客 102

Agent应用实践之二十九 - 设计模式:人机协同

本章讲解了一种比较常见的设计模式:人机协同。通过一些场景举例,同时使用AgentScope本身自带的能力实现的人机协同模式,最后通过源码分析了AgentScope中如何实现。通过了解人机协同模式对于实际工程使用也是非常有用的。

代码让AI扣 305

Motoman机器人离线编程——Motocom32开发简介

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章: Motoman机器人离线编程——Motocom32开发简介 Motoman机器人离线编程——Visio Studio环境配置 Motoman机器人离线编程——Motocom32库函数的使用与封装 Motoman机器人离线编程——Motocom32参考文献及注意事项 Motoman机器人离线编程——MotocomES介绍 ...

冯Jungle的个人博客 8713

利用qt打开一张图片并转成灰度矩阵

首先是mat类,这个类的主要作用是构造一个容器,并将对应像素的灰度值放在容器内#ifndef MAT_H #define MAT_H#include <vector> #include <qimage.h> #include <qstring.h> class mat{ public: mat(){} mat(QImage &img):width(img.width()),

锈铁工作室 2312

论文阅读:NeurIPS 2024 JailbreakBench: An Open Robustness Benchmark for Jailbreaking Large Language Model

论文指出评估越狱攻击存在挑战,如缺乏评估标准、成本和成功率计算方法不一致、许多研究无法复现。为解决这些问题,作者提出了JailbreakBench,这是一个开源基准测试,包含以下组件:持续更新的越狱提示库(jailbreak artifacts)。包含100种行为的越狱数据集,符合OpenAI的使用政策。标准化的评估框架,包括威胁模型、系统提示、聊天模板和评分函数。跟踪各种LLMs攻击和防御性能的排行榜。

CSPhD-winston的博客 1433

MatLab Qt 混沌加密函数 C++调用(附源码工程)

通过matlab生成混沌加密解密函数,生成对应库文件,供Qt调用,附源码及工程文件,开源自取

weixin_56440631的博客 466

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

libmatio函数说明

<br />matio库支持提供了用c/c++读写matlab下.mat文件的的方法。libmatio 1.3.3库中部分函数说明如下:<br />1. int Mat_Close (mat_t*  mat)<br />    关闭给定的Matlab MAT文件,释放相应的内存。<br />    mat为MAT文件的指针,返回值为0。<br />2. mat_t* Mat_Create (const char*  matname, const char*  hdr_str)<br />    建立

hxgqh的专栏 6189

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Qt之使用QPainter自绘实现窗口阴影边框
下一篇: Qt之实现移动的方块(蚂蚁线)
前行中的小猪
前行中的小猪 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄10年 4万+粉丝 134原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值