Qt 使用 Matlab函数
背景:个人的Qt项目中,需要一个图片分割算法。该算法之前在Matlab上实现过,同时转成C++版本有点麻烦,因此尝试通过Qt与Matlab编程相结合的方式,实现该功能。
注意:以下所有功能及配置过程,默认已经将所需软件正确安装成功
环境
Win10
Qt 5.12.10 (MSVC 2017 64 bit)
Matlab R2022b
Matlab函数实现
在Matlab中编写关于图像分割的函数 image_segment.m,假设其代码如下:
// 具体代码略去,函数的主要格式如下,必须是带参数的函数而不是脚本,否则会报错function image_segment(rgb_path)
close all;
%UNTITLED7 Summary of this function goes here
% Detailed explanation goes here
I=imread(rgb_path);% normal map loading
I=rgb2gray(I);
...
...
imwrite(I,"mask.png");%输出结果,保存为tif图片
end
将Matlab函数转换成动态链接库
首先检查自己的mcc编译器是否可用
输入以下命令
!mcc
若正常,则会出现以下结果:
mcc Compile MATLAB functions for deployment outside MATLAB. mcc [-options] fun [fun2...] Options applicable across all deployment targets: -? Display help for the mcc command -a Add additional files or directories to be included in the build -d Build output directory -g Include debugging symbol information -I Add a directory to be searched for MATLAB files -v Verbose display of build MATLAB Compiler Standalone Application (MATLAB|Hadoop|Spark) mcc -m <matlabFile.m> Excel Add-In mcc -W 'excel:<addinName>,<className>' -b <matlabFile.m> Hadoop Deployable Archive mcc -H -W 'hadoop:<archiveName>,CONFIG:<configFile.txt>' <mapperFile.m> <reducerFile.m> <datastoreInfo.mat> Spark Application mcc -C -W 'spark:<appName>,<sparkMajorVersion>' <matlabFile.m> MATLAB Compiler SDK C Shared Library mcc -W lib:<libraryName> <matlabFile.m> C++ Shared Library mcc -W cpplib:<libraryName> <matlabFile.m> .NET Assembly mcc -W 'dotnet:<assemblyName>,<className>' <matlabFile.m> Java Package mcc -W 'java:<packageName>,<className>' <matlabFile.m> Python Package mcc -W python:<pythonPackageName> <matlabFile.m> COM Component mcc -W com:<componentName> <matlabFile.m> MATLAB Production Server Deployable Archive mcc -W CTF:<archiveName> -U <matlabFile.m> Deployable Archive for Excel Add-In mcc -W mpsxl:<addinName> <matlabFile.m> Replace single quotes with double when executing the mcc command from a Windows Command Prompt. For more details, execute "doc mcc" from MATLAB.
随后在命令行输入mbuild -setup
,会出现如下结果。由于我们在C++环境下开发,选择带C++的选项
之后在命令行输入mex -setup
,同样是选择带C++的选项
随后点击APP,并点击下拉选项
选择Liberty Complier
“TYPE”部分选择C++ shared Library,“EXPORTED FUNCTIONS”是需要导出的m文件,点击+号选择需要编写的函数,选择Runtime downloaded from web,最后点击Package即可
在项目文件下会生成与函数名相同的子目录
进入for_redistribution_files_only文件夹,将生成的dll/lib/h文件,放入Qt项目的代码文件夹中
Qt调用
参考
此处和上一步,可参考该链接中part3以及part4.1-part4.5
运行以及问题处理
待上面步骤依次执行后,开始将相关功能集成与Qt项目中
- 首先在mainwindow.h中,添加
#include "image_segment.h
头文件- 接着执行
limage_segmentInitialize()
初始化,这一步是必须要有的
由于我的Matlab函数需要接受输入图像的地址,那么我们的写法如下
QString str = "你的图像地址;char * charStr = str.toLocal8Bit().data();mwArray rgb_path(charStr);image_segment(rgb_path);
需要注意的是,matlab在接收参数输入时,必须是mwArray格式,在这里我是string地址,因此需要将其转换为matlab能够识别的格式。同时需要注意图像地址在Qt书写时的格式,否则会出现读取错误的情况
Qt 使用 Matlab函数相关推荐
- 学习笔记:Qt与Matlab混合编程及遇到的诸多问题(附DEMO)
工具:MATLAB R2014b,Qt 5.6.1, 目标:通过MATLAB写一个简单的函数,生成动态链接库DLL,再在Qt上调用 1.在MATLAB主页新建一个函数 记住函数的名字和保存的函数文件的 ...
- 超详细基于Qt平台实现C/C++调用Matlab函数全流程
超详细基于Qt平台实现C/C++调用Matlab函数全流程 1. 基本调用方式介绍 2. 环境配置 3. 将Matlab程序写成函数形式 4. Matlab配置C编译器,将.m文件转换成动态链接库 4 ...
- Qt 调用MATLAB引擎混合编程
0.前言 C/C++调用MATLAB有三个方式:调用dll文件.调用exe可执行程序和调用Engin引擎. 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C++代码和相关动态链接库 ...
- Qt与Matlab混合编程细节总结
最近准备做一个项目,其中要用到很复杂的拟合算法等,自己去实现这些算法要很久,而手边有师兄已经写好的Matlab函数,如果可以实现利用Qt调用这些函数,那么工作量将会减少很多.而且这个看上去也很简单,至 ...
- qt web混合编程_基于Qt与MATLAB的混合编程技术
摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...
- QT与MATLAB混合编程
QT与MATLAB混合编程 本文就介绍使用 Qt 和 Matlab 进行混合编程的基本流程,主要包括: 如何在Matlab中将m文件编译为C++语言的DLL文件 如何在Qt项目中加入自定义DLL相关的 ...
- Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework
Qt调用Matlab库C#库dll调用C++调用C#库CSharp库lib invoke matlab library .net donet netframework 该文章是一篇说明c++/Qt调用 ...
- qt调用matlab生成的dll库
最近由于在项目中要用到matlab的算法,而用C++转换matlab算法非常麻烦,所以采用qt+matlab混合编程的方法,在使用中遇到了些许问题,特记录如下. 一.生成matlab库 1.首先需要下 ...
- Matlab2022a安装MinGW64编译器把matlab函数转换为c/c++库函数
Matlab2022a安装MinGW64编译器把matlab函数转换为c/c++库函数 最近在项目中,想把部分matlab中的算法函数转换为Qt下调用的C++函数,花了一天时间,配置成功,现把部分过程 ...
最新文章
- 最基础的绑定服务步骤
- Photoshop的基本操作
- ul、li列表简单实用代码实例
- Hashtable Dictionary[必看]
- SQLi LABS Less-30
- FinNexus宣布已售出1000万枚FNX给相关投资者
- Java关闭窗口和刷新
- mysql备份脚本 shell_MySQL数据库备份Shell脚本
- 在线教育app平台搭建招生系统教培系统源码
- 猎豹网校梁兴珍老师的python课程很不错
- 商陆花、秦丝、管家婆,到底服装加盟管理软件哪家强?来看排行榜
- 嵌入式Linux开发简介
- sqlserver查看历史死锁信息
- 计算机机房管理具体工作和职责,机房职责_机房岗位职责_机房工作职责
- 如何修改windows某类后缀文件的图标和系统文件夹的图标
- 2018区块链概念股龙头
- 怎么mac ftp服务器文件夹,mac 访问 ftp服务器文件夹权限
- 教师职业道德与专业发展
- 亲身经历:一次sql缺少where条件的惨案,绩效奖金差点没啦~
- The s:form tag declares that it accepts dynamic attributes but does not implemen