linux c++ 调用matlab,ubuntu系统下C++调用matlab程序的方法详解
前言
最近因为工作的需要在研究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程序的方法详解相关推荐
- Linux、ubuntu系统下查看显卡型号、显卡信息详解
本文将介绍Linux系统下查看显卡硬件信息内容如下: 如何在ubuntu系统中查看显卡型号.(其他文章大多只介绍了命令而未介绍如何对应显卡型号) 在ubuntu系统中显卡详细信息,以及所代表的含义. ...
- cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件
cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排 cmake 编译工程具有独特的优势 ...
- redis linux 运行依赖,在Ubuntu系统下安装Redis Desktop Manager的方法
以下为你介绍在Ubuntu16.04系统下安装Redis可视化工具Redis Desktop Manager.不管是哪个Redis Desktop Manager版本,都可以采用下面的安装方式进行. ...
- linux 取消utc时间,ubuntu系统下禁用utc时间的设置方法
前言 大家在安装双系统以后,发现进入win7和ubuntu系统以后,显示的时间不一致,后来发现是两个系统对硬件时间的看法不一致 原因如下 1.Windows会认为BIOS时间就是你的本地时间 2.ub ...
- Linux系统下安装rz/sz命令及使用说明(详解)
Linux系统下安装rz/sz命令及使用说明(详解) 对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能, ...
- 查看登陆系统用户的信息的三种方法详解
查看登陆系统用户的信息的三种方法详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.who这个命令显示可以谁在登陆,但是这个有很多的花式玩法,这个命令超简单 语法:who [O ...
- Win7下SQLite安装配置与使用方法详解
Win7下SQLite安装配置与使用方法详解 2014-10-08 分类:数据库.编程开发.首页精华2人评论 来源:aehyok 分享到:更多1 前言 SQLite 是一个软件库,实现了 ...
- 在Ubuntu系统下运行c语言程序
第一周作业--嵌入式系统程序设计系统基础 作业要求 请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c, 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int ...
- 【嵌入式1】Ubuntu系统下运行C语言程序以及用Makefile方式编程
文章目录 一.设置网络参数 1.虚拟机网络适配器设置为NAT模式 2.确定网卡ip 3.设置NAT网络的端口映射 4.进行网络测试 二.用C语言编写一个简单的输出 hello word 的程序. 三. ...
最新文章
- Linux下Redis-3.0.7版本的安装以及Redis主备的部署(一)
- 网络主机监控-nagios应用漫谈(三)
- SQL Server 2008 R2——分组取前几名
- 安装Eclipse插件
- java常见异常说明汇总
- 八数码问题——双向广度优先搜索解决
- java dbcp_Java dbcp连接池基本使用方法详解
- ts可展开注释_Nike控告WL的始末,和它被TS带货后的几近成名
- RedisTemplate常用集合使用说明-opsForSet(五)
- python add_subplot_Python使用add_subplot与subplot画子图操作
- CountDownLatch理解
- 统一沟通-技巧-10-Lync-公网证书-Go Daddy-Buy
- 【机器学习】如何使用随机网格搜索,以缩短网格搜索速度?
- uniapp 小程序列表懒加载
- 微机8088主板图绘制
- html复选框,不打勾默认值是0,打钩默认值是1,方框打钩符号复制(一招教你方框里打勾的符号)...
- python中print的用法_Python中print用法里面% ,%s 和 % d 代表的意思
- 【MYSQL】误删数据恢复流程说明
- 枚举算法5——填数游戏
- 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?
热门文章
- jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能
- 2线程原语:pthread_create(),pthread_self(),pthread_exit(),pthread_join(),pthread_cancel(),pthread_detach(
- Linux ls查看目录文件命令集锦
- android运行jar文件路径,java命令行执行jar包报错解决
- 关于初学Go的一些总结
- C# ASP.NET Forms身份认证
- laravel-admin配置安装完新手使用
- 云架构的基础转变会带来哪些变化?
- Linux笔记 1-8 --文件传输
- [改善Java代码]break万万不可忘