背景:个人的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函数相关推荐

  1. 学习笔记:Qt与Matlab混合编程及遇到的诸多问题(附DEMO)

    工具:MATLAB R2014b,Qt 5.6.1, 目标:通过MATLAB写一个简单的函数,生成动态链接库DLL,再在Qt上调用 1.在MATLAB主页新建一个函数 记住函数的名字和保存的函数文件的 ...

  2. 超详细基于Qt平台实现C/C++调用Matlab函数全流程

    超详细基于Qt平台实现C/C++调用Matlab函数全流程 1. 基本调用方式介绍 2. 环境配置 3. 将Matlab程序写成函数形式 4. Matlab配置C编译器,将.m文件转换成动态链接库 4 ...

  3. Qt 调用MATLAB引擎混合编程

    0.前言 C/C++调用MATLAB有三个方式:调用dll文件.调用exe可执行程序和调用Engin引擎. 第一种方式利用MATLAB Coder 将MATLAB代码生成C/C++代码和相关动态链接库 ...

  4. Qt与Matlab混合编程细节总结

    最近准备做一个项目,其中要用到很复杂的拟合算法等,自己去实现这些算法要很久,而手边有师兄已经写好的Matlab函数,如果可以实现利用Qt调用这些函数,那么工作量将会减少很多.而且这个看上去也很简单,至 ...

  5. qt web混合编程_基于Qt与MATLAB的混合编程技术

    摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...

  6. QT与MATLAB混合编程

    QT与MATLAB混合编程 本文就介绍使用 Qt 和 Matlab 进行混合编程的基本流程,主要包括: 如何在Matlab中将m文件编译为C++语言的DLL文件 如何在Qt项目中加入自定义DLL相关的 ...

  7. 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调用 ...

  8. qt调用matlab生成的dll库

    最近由于在项目中要用到matlab的算法,而用C++转换matlab算法非常麻烦,所以采用qt+matlab混合编程的方法,在使用中遇到了些许问题,特记录如下. 一.生成matlab库 1.首先需要下 ...

  9. Matlab2022a安装MinGW64编译器把matlab函数转换为c/c++库函数

    Matlab2022a安装MinGW64编译器把matlab函数转换为c/c++库函数 最近在项目中,想把部分matlab中的算法函数转换为Qt下调用的C++函数,花了一天时间,配置成功,现把部分过程 ...

最新文章

  1. 最基础的绑定服务步骤
  2. Photoshop的基本操作
  3. ul、li列表简单实用代码实例
  4. Hashtable Dictionary[必看]
  5. SQLi LABS Less-30
  6. FinNexus宣布已售出1000万枚FNX给相关投资者
  7. Java关闭窗口和刷新
  8. mysql备份脚本 shell_MySQL数据库备份Shell脚本
  9. 在线教育app平台搭建招生系统教培系统源码
  10. 猎豹网校梁兴珍老师的python课程很不错
  11. 商陆花、秦丝、管家婆,到底服装加盟管理软件哪家强?来看排行榜
  12. 嵌入式Linux开发简介
  13. sqlserver查看历史死锁信息
  14. 计算机机房管理具体工作和职责,机房职责_机房岗位职责_机房工作职责
  15. 如何修改windows某类后缀文件的图标和系统文件夹的图标
  16. 2018区块链概念股龙头
  17. 怎么mac ftp服务器文件夹,mac 访问 ftp服务器文件夹权限
  18. 教师职业道德与专业发展
  19. 亲身经历:一次sql缺少where条件的惨案,绩效奖金差点没啦~
  20. The s:form tag declares that it accepts dynamic attributes but does not implemen

热门文章

  1. GBK 代码集字符定义表
  2. Stream流式计算
  3. linux下vimrc和.vimrc以及.vimrc的常用设置
  4. IDEA 中配置GIT环境
  5. 小企业无线局域网服务器,无线局域网AAA服务器的软件设计与实现
  6. 01-Partial Dependence Plot(PDP)部分依赖图
  7. 小程序errno_错误:UNIX程序中的errno
  8. JRE和JDK和JVM
  9. php中各种括号的使用方法,PHP的大括号(花括号{})使用详解
  10. 仿soul交友盲盒1.0全开源源码