Matlab自定义函数在VS中使用C++语言调用

问题描述:

之前在Matlab中用到了两个算法,一个用了求图像的Zernike矩,一个ICP算法。后来在VS下使用C++语言开发QT界面,尝试将matlab的函数转换到vs中,用了3种办法,前后费时5天,整理一下,希望能帮助有需要的朋友。

虽然尝试了3种方法,但只有最后1种方法实验成功。

考虑到网上对各种方法都有很多详尽的介绍,很多内容我就一笔带过吧,有疑问的我再具体解答。

1.MATLAB CODER

使用菜单栏“APP”下的MATLAB CODER 可以直接转换成c++文件,是可以直接修改,一步步看代码的。

最开始用这种方法,程序跑了两遍都不知道结果在哪儿看,而且数组与图像间的转换非常奇葩,尝试无果,放弃。

2.mex -setup

这个方法耗时一天半,就是将上述语句在命令行中输入,就会根据你的配置情况进行提示。

我最开始是matlab2015+vs2017,死活找不到编译器,从官网上看是M15不支持VS17(这个对应关系一定要看好),于是后面装了M17。

但有个逻辑没搞清,希望有朋友可以解释一下:大家都在强调,必须是64位对64位,32对32,我的电脑是64位,VS17只有64位,我编译环境是64,Matlab17b只找到了64,那这时候我配置是对还是错呢。

由于各种位置的原因,用这种方法死活卡在了初始化的地方,

调用M函数时,需要两步初始化:mclInitializeApplication和FUNCInitialize(FUNC是你定义的M文件的名字),我在第二个初始化的地方一直是失败(false),无果放弃。

3.deploytool

在菜单栏输入deploytool,选择Library Compile,在弹出窗口的type处选择C++ Shared Library,函数处可以多选。具体操作见网上其他的描述。尝试了发现两个初始化都可以跑通。我重点说下我的问题:

我的函数是求图像的Z矩,但是其中调用了另一个.m函数,之前没注意,一直得不到正确的结果。发现之后,把另一个函数的调用取消,直接把代码整合在一个.m文件里,运行,成功。

开心。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值