在Matlab中调用C/C++程序<三>

MATLAB调用C语言程序—一个简单的例子 MATLAB在数值运算、图像处理、实时仿真方面具有很大得优势,但它得运行速度远远不及C语言或C++,为了解决这一问题,MATLAB提供了和C/C++混合编程的接口,以此讲MATLAB对运算、图形处理得优点和c语言运行速度快得特点想结合。 混合编程的一般步骤:MATLAB 函数使用MATLAB格式数据 —>C/C++程序首先解析MATLAB数据 —>解析后运行C/C++程序,得到结果 —>C/C++程序最后要把上述结果数据打包成MATLAB格式输出给MATLAB中的主调程序。MATLAB是不 阅读详情

本文转载自:herohbc


本文介绍如何在Microsoft Visual C++的IDE中生成MEX文件。

当我们的工程特别大,需要调用许多外部库函数时,直接在Matlab的Command Window中运行mex函数就十分的麻烦了。

这时,我们可以使用微软提供的C/C++集成开发环境。

下面将以Visual Studio 2008 SP1为例,编写一个mexFunction函数,通过调用OpenCV中的函数来计算一个方阵的行列式。

1. 配置Visual Studio 2008的开发环境

1.1 新建环境变量Matlab,如下图所示。

 

1.2 打开Visual Studio 2008,Tools -> Options -> Projects and Solutions -> VC++ Directories,选择右端Show directories for:下拉列表中的Include files,添加记录

$(Matlab)\extern\include

$(Matlab)\extern\include\win32

 

1.3 再选择Show directories for:下拉列表中的Library files,添加记录$(Matlab)\extern\lib\win32\microsoft,单击OK按钮。

 

1.4 OpenCV的配置方法可参见我去年的一篇博客http://hi.baidu.com/herohbc/item/d02d09cc3bdcc90ec610b264,我现在使用的OpenCV的版本为2.3.1,但配置方法都一样。也可以参见OpenCV的官方说明。

 

1.5 配置完成后,重启电脑。

 

2. 生成MEX文件

2.1 打开Visual Studio 2008,新建一个Window32 Console Application程序,工程名为det_opencv,Application type设置为Dll,并勾选Empty project,单击Finish。如下图所示。

 

2.2 新建文件det_opencv.cpp,内容如下:

#include <mex.h>
#include <opencv2/core/core.hpp>

 

#ifdef _DEBUG
#pragma comment(lib, "opencv_core231d.lib")
#else
#pragma comment(lib, "opencv_core231.lib")
#endif

 

#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmex.lib")
#pragma comment(lib, "libmat.lib")


void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
 if (nrhs != 1)
 {
  mexErrMsgTxt("One input argument required.");
 }
 
 if (nlhs != 1)
 {
  mexErrMsgTxt("One output argument required.");
 }

 

 int M = mxGetM(prhs[0]);
 if (M != mxGetN(prhs[0]))
 {
  mexErrMsgTxt("Matrix must be square.");
 }

 

 double *p = mxGetPr(prhs[0]);
 cv::Mat A(M, M, CV_64FC1, p);
 double d = cv::determinant(A);
 
 plhs[0] = mxCreateDoubleScalar(d);
}

 

2.3 在Release模式下,打开Project -> det_opencv Properties...,将Linker -> General -> Output File的扩展名由.dll修改为.mexw32。如下图所示。

当然,不修改也可以。但在使用时,Matlab会给出警告信息。

 

2.4 新建文件det_opencv.def,内容如下:

LIBRARY "det_opencv"
EXPORTS mexFunction

 

2.5 在Release模式下编译成功后,det_opencv所在目录下的Release文件夹中会生成一个det_opencv.mexw32文件。这就是我们最终所需要的MEX文件。

 

3. 测试程序

3.1 将det_opencv.mexw32文件复制到Matlab的Current Folder。

 

3.2 在Command Window中输入以下命令:

>> format long
>> A = rand(20,20);
>> d1 = det_opencv(A)

d1 =

  -0.023477632036476

>> d2 = det(A)

d2 =

  -0.023477632036475

 

3.3 det_opencv.mexw32没有任何帮助信息,因此最好建立一个M文件,进行一下简单的封装。例如,新建文件test_det.m,内容如下:

function d = test_det(A)
% Computing the determinant of the square matrix A by invoking function det_opencv
% 
% Just for a test!
% 2012 - 08 - 11

d = det_opencv(A);

 

注意,det_opencv.mexw32和test_det.m要放在同一文件夹中。





C/C++与Matlab混合编程初探 Matlab 拥有丰富的功能,编程简单。不过,有些情况下,Matlab程序的执行速度比较慢。C/C++编译执行的程序速度比较快,编程难度上比Matlab要高一些。因此存在一种方案,就是使用Matlab实现我们的实验程序,用C/C++来实现Matlab程序中比较耗时的部分,从Matlab程序中调用C/C++的程序以实现加速。 阅读详情

相关推荐

Matlab与C/C++混合编程接口应用总结

在参考文献基础上。补充和完善了。 Matlab与C/C++混合编程接口及应用     摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序设计语言,两者互补结合的混合编程在科学研究和工程实践中具有非常重要的意义。从Matlab调用C/C++代码及C/C++调用m文件两方面,深入地研究了它们之间混合编程的原理和实现机制,并且给出了具体条件下的混合编程方法和步骤

jtop0的专栏 1万+

MATLAB调用C总结

1、生成mex文件两种方式: MATLAB:mex filename.cpp C:http://www.cnblogs.com/lukylu/p/4042306.html; 如果有错,就结合此配置方式:http://www.jb51.net/article/34727.htm 2、VS中单步调试mex: 1)将vs生成的mexw文件放到(替换原先的mexw文件)MATLAB代码要调用的地...

EVEcho的博客 3901

MATLAB 函数导出c/c++代码被vs2010调用

MATLAB 函数导出c/c++代码被vs2010调用 在用形态学的时候,发现Matlab中的函数 bwmorph()很好用,比如 “thicken” "thin" ,源码还没看懂,想要通过 Matlab Coder转换成C/C++直接用。    环境: vs2010 MATLAB R2014a vs2010中配置好了opencv2.4.9   目的: 把matlab中的函数 B

yiqiudream的博客 5792

matlab | 调用C++

mex -setup 首先在matlab中输入mex -setup;注意仔细看输入的格式。出现参数错位是由于输入的“-”前面没有加入空格。 正确输入后,setup变成紫色!此时让我们安装 MinGW-w64 C/C++ 编译器,点击附加功能-获取附加功能,搜索“MinGW-w64” 并安装: 此时,我们再次输入mex -setup。在弹出的对话中,我们直接用鼠标点击选择C++即可。 mbuild –setup 同样,在matlab命令行,输入mbuild –setup 搜索并安装MATLAB Co

简单光学 7216

ubuntu c/c++中调用matlab函数

最近实验室一位伊拉克博士仁兄在写paper,要做仿真。需要在c++中调用matlab里面的函数。据说matlab已经有了动态链接库供调用,但是从网上百度google了下,暂时也没有找到比较详细的教程,就打算自己编译matlab某个函数的动态库。具体流程如下,以调用matlab中sin函数为例。 ubuntu12.04下的matlab安装请参照: http://bbs.weiphone.

looong2b的专栏 5276

C/C++调用matlab

环境:WIN7 VS2008 MATLAB2009a 版本无所谓 操作上大同小异 首先配置matlab,在命令窗口输入mex -setup (matlab从2012还是2014版本以上就不需要这步了) 然后选择n,如图 因为我装的是VS

蒟蒻升级中...Orz 1074

学习笔记-C与MATLAB混合编程:MATLAB调用C的lib

转发自:https://blog.youkuaiyun.com/qwe11114000/article/details/50107877,感谢“qwe11114000”的文章。作者提出两个方法,对方法一的样例,简洁明了,其中我使用了"MATLAB R2017b"联合“Microsoft Visual C++ 2017 (C)”,选择release版本的lib,即可。 文章内容如下: 方法一: 条...

smallcaptain2009的专栏 2015

matlab:matlab调用c++

matlab:matlab调用c++

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1360

把MATLAB代码编译中C++能调用的LIB文件

1.      假设a.m文件中主函数文件,在里面调用了其它的M文件如,b.m,c.m等; 2.      找开MATLAB编译器,运行命令deploytool,如下图: 后出现对话框:其中Name:表示后面生成的.h,.lib,.dll的名称;Location表示生成的这些文件将存放在何处;Type:是最主要的,在此处选择C++ Shared Library,要生成其它的共享库可根据提供

u013713010的专栏 3265

Mac本地部署OpenClaw:从零搭建企业级知识库AI助手

大语言模型(LLM)作为当前人工智能的核心技术,通过其强大的自然语言理解和生成能力,正在深刻改变信息交互方式。其原理是基于海量数据训练的深度神经网络,能够根据上下文预测并生成连贯文本。这一技术的核心价值在于,它能够作为智能中枢,理解和执行复杂指令,从而将通用AI能力转化为解决特定业务问题的生产力。在工程实践中,通过AI Agent框架(如OpenClaw)将LLM与外部工具和知识系统连接,是实现其价值的关键。这涉及到**本地部署**与**私有化**部署,以确保数据安全与成本可控。具体应用场景包括企业知识库问

weixin_33402252的博客 376

2026终极反反爬:Canvas/WebGL/字体指纹全维度伪装,应对浏览器检测实战指南

本文分享了2026年浏览器指纹检测现状及全维度伪装方案。当前反爬系统采用多维度联合指纹检测,重点针对硬件级(WebGL、Canvas)、系统级(字体、CPU)和行为级(鼠标移动)指纹。作者设计了一个独立的指纹伪装引擎,包含真实设备指纹库、指纹生成器和统一注入层,通过JS沙箱隔离实现伪装。核心方案包括:Canvas指纹通过真实设备渲染差异添加微偏移;WebGL指纹完整劫持上下文返回真实显卡参数;字体指纹劫持measureText方法模拟不同系统字体宽度。该方案实测可连续运行一个月零封号,解决了传统方法易被检测

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 923

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

基于Qt平台实现C/C++调用Matlab函数有三种方式:(1)将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现;(2)将Matlab函数导出成.exe可执行程序,再在Qt平台上调用.exe可执行程序;(3)直接在Qt平台上调用Matlab Engin引擎,这种方法需要计算机上安装有Matlab软件。本文是通过第一种方式,将MATLAB代码转成C/C++代码和相关动态链接库进行实现的,其他两种方式具体可以参考:Qt调用MATLAB引擎混合编程。

宁静致远的博客 4267

【docker】第10篇 Failed with result ‘exit-code和Start request repeated too quickly和Failed to start Docker

【docker】解决 Failed with result 'exit-code'和Start request repeated too quickly和Failed to start Docker。

Fanjufei的博客 6818

matlab中调用c/c++程序

原文地址:[zz]matlab中调用c/c++程序作者:lilyrabbit (一)接口种类 ·MEX文件 在MATLAB中可调用的C或Fortran语言程序称为MEX文件。MATLAB可以直接把MEX文件视为它的内建函数进行调用。MEX文件是动态链接的子例程,MATLAB解释器可以自动载入并执行它。MEX文件主要有以下用途: 对于大量现有的C或者Fortran程序可以无须改写成M

cv_richie的专栏 1357

反应动力学仿真软件:Kintecus_(12).高级功能与技巧

Kintecus允许用户自定义复杂的反应方程,包括非线性反应和多相反应。通过自定义反应方程,用户可以更准确地描述实际反应系统。多尺度仿真是指在同一模型中同时考虑不同时间和空间尺度的反应过程。Kintecus提供了工具来处理从微观分子动力学到宏观反应动力学的多尺度仿真。通过本节的学习,您已经掌握了Kintecus的高级功能与技巧,包括复杂反应网络的构建、参数优化与敏感性分析、自定义反应机制、多尺度仿真、并行计算与批处理,以及数据可视化与后处理。

kkchenjj的博客 1047

Autosar MCAL-S32K324 Fee配置-基于EB

Autosar MCAL S32K324 Fee配置详解

赞的博客 1544

C/C++调用Matlab

C/C++调用Matlab

柠檬野生菌的摆烂笔记 2523

JavaSwing_4.2: JDialog、JOptionPane(对话框)

JDialog,对话框。使用 JDialog 类可以创建自定义有的对话框,或者调用 JOptionPane 中的多个静态方法快速创建各种标准的对话框。JOptionPane是 JavaSwing 内部已实现好的,以静态方法的形式提供调用,能够快速方便的弹出要求用户提供值或向其发出通知的标准对话框。

谢TS的博客 7万+

在Matlab中调用C/C++程序<一>

本文转载自:点击打开链接 师兄的博客。 在Matlab中调用C/C++程序有以下优点: (1)对于用C/C++语言编写好的程序,我们不需要再改写成Matlab程序; (2)在Matlab中执行特别慢的程序,可以编写成C/C++函数以加快运算速度。如Matlab执行多层for循环速度特别慢,可以考虑用C/C++来实现这部分功能。 为了能够调用C/C++程序,

极度视界 1万+

redhawk:Low Power Analysis

1.rush current与switch cell 在standby状态下为了控制leakage power我们选择power gating的设计方式,使用power switch cell关闭block/power domain的电源。 power switch的基本介绍可见: 低功耗设计-Power Switch power switch的table中有四种状态,对应block工作、待机和上电,下电。low power analysis主要分析上电的过程。 上电过程可以看做mos电容

m0_61544122的博客 3203

103、模拟增益vs数字增益:信噪比、动态范围与噪声放大的权衡艺术及调试陷阱

摘要 本文深入探讨了模拟增益与数字增益在图像处理中的差异及其对信噪比、动态范围和噪声放大的影响。作者通过实际案例揭示了数字增益可能导致的噪点放大问题,分析了模拟增益在物理层面对信号和噪声的放大机制,以及数字增益对量化噪声的影响。文章详细比较了两种增益方式下信噪比的变化曲线,指出数字增益会平方放大量化噪声的致命缺陷。此外,作者总结了常见的调试陷阱,并提供了针对不同光照场景的增益分配策略建议。最后强调调试时应优先考虑模拟增益,严格控制数字增益幅度,并配合降噪算法优化以获得最佳图像质量。

zzfmlxs的博客 48

C/C++调用matlab程序

C/C++调用MATLAB程序可以通过多种方式: 生成独立运行的MATLAB程序是使用MATLAB编译器编译m文件最常用的一种方式。通过将m文件编译为可独立运行的可执行文件,为用户提供了一种最简单的发布MATLAB程序的方法。 Ø  将MATLAB  m文件编译为可独立运行的可执行文件,通过修改接口文件的方式实现在C/C++程序中调用MATLAB文件。 Ø  通过MATLAB引擎可以直接执

yuyali8866的专栏 1277

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

三种方式在C++中调用matlab

c.在VC中选择:工程->设置,选择属性表Link 选项,下拉菜单中选择Input,在对象 / 库模块中加入libmmfile.liblibmatlb.lib libmx.lib libmat.lib libmatpm.lib sgl.lib libmwsglm.liblibmwservices.lib , 注意用空格分开;在工程实践中,C/C++调用Matlab 的方法主要有调用Matlab 计算引擎、包含m 文件转 换的C/C++文件,以及调用m文件生成的DLL 文件。

qq_43248127的博客 4343

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(四)

利用Matlab与VC++联合编程,既可在C语言程序中打开Matlab引擎,调用Matlab的ToolBox函数和作图函数,也可在Matlab中调用C代码生成的动态链接库文件,用以加快执行速度、缩短开发周期,取得更好的效果。MATLAB与C语言的接口采用称为MEX的动态链接方式进行。MEX文件是由C源程序经过编译生成的MATLAB动态链接子程序,它的作用十分类似于MATLAB的内建函数,可由MAT

pursh0000的博客 5779

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MATLAB 调用编译.c/.cpp文件

1、设置编译器 在命令窗口输入 mex -setup,根据提示选择合适的编译器。通常我们使用的都是“Microsoft Visual C++”编译器。 如果编译器设置有问题,具体可以到官网查看不同MATLAB支持的编译器类型以及具体的问题。不过,通常都不会有问题。 MathWorks 支持:http://cn.mathworks.com/help/matlab/call-mex-files-

shuzfan的专栏 8099

将MATLAB的变量数据导入到C/C++程序中的方法

怎样将将MATLAB的变量数据导入到C/C++程序中? 最开始,我想在VC中直接调用MATLAB-Workspace中的变量,即通过混合编程的方式来实现将MATLAB的变量数据导入到VC中,如果以后还需要这种方法,可以参考以下资料:http://www.tuicool.com/articles/eQBrQvahttp://blog.sina.com.cn/s/blog_67d069a90100q37c.html 博主2022-04-15注:上面两篇,第一篇要注册登陆才能看了,我这里注册了一个帐号,分享给

昊虹AI笔记 9016
上一篇: 在Matlab中调用C/C++程序<二>
下一篇: 在Matlab中调用C/C++程序<四>
LiFeitengup
博客等级 码龄15年 466粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值