前言

最近因为工作的需要在研究C++怎么调用matlab程序,发现网上的资料较少,所以将自己学习的内容总结分享出来,下面话不多说了,来一起看看详细的介绍吧。

实验平台:

ubuntu  matlab R2016b   g++

步骤:

1.    设置matlab的编译器

在命令行窗口下,输入并执行如下命令:mex ?setup

在出现的编译器中,选择mex -setup C++

然后在输入命令:mbuild ?setup

同样选择mex -setup C++ -client MBUILD

2.    编写.m文件

如下函数时完成图像的分割功能,第一个参数是图像的文件名(路径),第二个参数是分割图像阈值的大小;完成分割后,将图像保存为result.bmp;返回值则是原图像的数据;

function imagedata=improcess(filename,threshold);

imagedata=double(imread(filename));

newbuf=imagedata;

[M N]=size(imagedata);

for i=1:1:M

for j=1:1:N

if imagedata(i,j)>threshold

newbuf(i,j)=255;

else

newbuf(i,j)=0;

end

end

end

imwrite(uint8(newbuf),'result.bmp');

return;

3.    编译.m文件

*****注意****:在ubuntu下编译.m文件,文件名要以lib开头,后面在路径配置的时候很关键, 当然window下最好也以lib开头。

mcc -W cpplib:libMypr -T link:lib improcess.m

解释:其中-W是控制编译之后的封装格式;

cpplib,是指编译成C++的lib;

cpplib冒号后面是指编译的库的名字;

-T表示目标,link:lib表示要连接到一个库文件的目标,目标的名字即是.m函数的名字。

编译完成之后,libMypr.h libMypr.cpp libMypr.so libMypr.exports这四个文件时我们在c++中调用所需要的;

4. 编写C++代码(test.cpp)放在桌面的test文件下,并且将上面编译的.m文件也拷贝到该文件下:(注意初始化操作)

#include "mclmcrrt.h"

#include "mclmcr.h"

#include "mclcppclass.h"

#include "matrix.h"

#include

#include "libMypr.h"

using namespace std;

int main(int argc, char* argv[])

{

//初始化, 在C++调用matlab时,必须要进行初始化。

if( !libMyprInitialize())

{

printf("Could not initialize !");

return -1;

}

char f_name[10]="lenna.pgm";

//必须将lenna.pgm图像,拷贝到工程目录下

mwArray file_name(f_name);//'lenna.pgm'

mwArray m_threshold(1,1, mxDOUBLE_CLASS);

m_threshold(1,1)=128;//阈值为128

mwArray ImageData(512,512, mxDOUBLE_CLASS);

improcess(1,ImageData,file_name,m_threshold);

//1,表示返回值的个数,ImageData用于接收返回值

printf("\n图像处理结束,已经图像以阈值128分割开!\n");

double *resultdata=new double[512*512];

ImageData.GetData(resultdata,512*512);

printf("\n已获得图像数据...\n");

for(int i=0;i<512;i++)

{

for(int j=0;j<512;j++)

{

printf("%0.1f ",resultdata[512*i+j]);

}

printf("\n");

}

delete []resultdata;

// 后面是一些终止调用的程序

// terminate the lib

libMyprTerminate();

return 0;

}

5.上面的准备好了,按照下面的步骤就可以跑起来了O(∩_∩)O。

(1)生成编译文件test.o

g++ - c test.cpp -I/usr/local/MATLAB/R2016b/extern/include/ -o test.o

(2)设置matlab动态文件路径

export LD_LIBRARY_PATH="/home/liupeng/Desktop/test:/usr/local/MATLAB/R2016b/runtime/glnxa64:$LD_LIBRARY_PATH"

(3)生成执行文件testApp

g++ -o testApp test.o -L/home/liupeng/Desktop/test

-L/usr/local/MATLAB/R2016b/runtime/glnxa64 -lmwmclmcrrt -L/home/liupeng/Desktop/test-lMypr

(4)运行./testApp

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

linux c++ 调用matlab,ubuntu系统下C++调用matlab程序的方法详解相关推荐

  1. Linux、ubuntu系统下查看显卡型号、显卡信息详解

    本文将介绍Linux系统下查看显卡硬件信息内容如下: 如何在ubuntu系统中查看显卡型号.(其他文章大多只介绍了命令而未介绍如何对应显卡型号) 在ubuntu系统中显卡详细信息,以及所代表的含义. ...

  2. cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件

    cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排 cmake 编译工程具有独特的优势 ...

  3. redis linux 运行依赖,在Ubuntu系统下安装Redis Desktop Manager的方法

    以下为你介绍在Ubuntu16.04系统下安装Redis可视化工具Redis Desktop Manager.不管是哪个Redis Desktop Manager版本,都可以采用下面的安装方式进行. ...

  4. linux 取消utc时间,ubuntu系统下禁用utc时间的设置方法

    前言 大家在安装双系统以后,发现进入win7和ubuntu系统以后,显示的时间不一致,后来发现是两个系统对硬件时间的看法不一致 原因如下 1.Windows会认为BIOS时间就是你的本地时间 2.ub ...

  5. Linux系统下安装rz/sz命令及使用说明(详解)

    Linux系统下安装rz/sz命令及使用说明(详解) 对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能, ...

  6. 查看登陆系统用户的信息的三种方法详解

    查看登陆系统用户的信息的三种方法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.who这个命令显示可以谁在登陆,但是这个有很多的花式玩法,这个命令超简单 语法:who [O ...

  7. Win7下SQLite安装配置与使用方法详解

    Win7下SQLite安装配置与使用方法详解 2014-10-08    分类:数据库.编程开发.首页精华2人评论     来源:aehyok 分享到:更多1 前言 SQLite 是一个软件库,实现了 ...

  8. 在Ubuntu系统下运行c语言程序

    第一周作业--嵌入式系统程序设计系统基础 作业要求 请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int ...

  9. 【嵌入式1】Ubuntu系统下运行C语言程序以及用Makefile方式编程

    文章目录 一.设置网络参数 1.虚拟机网络适配器设置为NAT模式 2.确定网卡ip 3.设置NAT网络的端口映射 4.进行网络测试 二.用C语言编写一个简单的输出 hello word 的程序. 三. ...

最新文章

  1. Linux下Redis-3.0.7版本的安装以及Redis主备的部署(一)
  2. 网络主机监控-nagios应用漫谈(三)
  3. SQL Server 2008 R2——分组取前几名
  4. 安装Eclipse插件
  5. java常见异常说明汇总
  6. 八数码问题——双向广度优先搜索解决
  7. java dbcp_Java dbcp连接池基本使用方法详解
  8. ts可展开注释_Nike控告WL的始末,和它被TS带货后的几近成名
  9. RedisTemplate常用集合使用说明-opsForSet(五)
  10. python add_subplot_Python使用add_subplot与subplot画子图操作
  11. CountDownLatch理解
  12. 统一沟通-技巧-10-Lync-公网证书-Go Daddy-Buy
  13. 【机器学习】如何使用随机网格搜索,以缩短网格搜索速度?
  14. uniapp 小程序列表懒加载
  15. 微机8088主板图绘制
  16. html复选框,不打勾默认值是0,打钩默认值是1,方框打钩符号复制(一招教你方框里打勾的符号)...
  17. python中print的用法_Python中print用法里面% ,%s 和 % d 代表的意思
  18. 【MYSQL】误删数据恢复流程说明
  19. 枚举算法5——填数游戏
  20. 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?

热门文章

  1. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
  2. 2线程原语:pthread_create(),pthread_self(),pthread_exit(),pthread_join(),pthread_cancel(),pthread_detach(
  3. Linux ls查看目录文件命令集锦
  4. android运行jar文件路径,java命令行执行jar包报错解决
  5. 关于初学Go的一些总结
  6. C# ASP.NET Forms身份认证
  7. laravel-admin配置安装完新手使用
  8. 云架构的基础转变会带来哪些变化?
  9. Linux笔记 1-8 --文件传输
  10. [改善Java代码]break万万不可忘