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 <iostream>
#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

总结

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

(0)

相关推荐

  • ubuntu下apt-get安装和彻底卸载mysql详解

    1.安装mysql: udo apt-get install mysql-server udo apt-get install mysql-client udo apt-get install php5-mysql(用于连接php和mysql) 查看mysql是否运行 aux | grep mysql 启动命令 /etc/init.d/mysql start 2.删除mysql 按顺序执行以下命令 udo apt-get autoremove --purge mysql-server-5.0 u

  • Ubuntu cron日志开启与查看的实现步骤

    Ubuntu cron日志开启与查看的实现步骤 ubuntu默认没有开启cron日志记录 1. 修改rsyslog vim /etc/rsyslog.d/50-default.conf cron.* /var/log/cron.log #将cron前面的注释符去掉 2.重启rsyslog service rsyslog restart 3.查看crontab日志 tail /var/log/cron.log 默认cron会发送邮件把任务的运行结果比如错误信息发送到系统用户的邮箱中,而不会在log

  • Ubuntu彻底卸载MySQL、Apache2和Php的方法教程

    前言 我们在安装时候使用一键安装非常方便,但是想卸载的时候总是卸载不干净,下面本文就来给大家关于Ubuntu彻底卸载MySQL.Apache2和Php的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 一.卸载删除 mysql 1 sudo apt-get autoremove --purge mysql-server-5.0 2 sudo apt-get remove mysql-server 3 sudo apt-get autoremove mysql-server 4

  • Ubuntu安装PHP和PHP Nginx配置方法

    最近接手了一个 PHP 项目,之前没做过 PHP,于是从搭建PHP环境开始学习下,同时写篇 Ubuntu 安装 PHP 的教程. 一.删除遗留的PHP包 sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "` sudo apt autoremove 二.添加PPA sudo apt-get install -y language-pack-en-base sudo LC_ALL=e

  • Ubuntu“无法打开锁文件(Could not get lock)”问题解决方法

    用apt-get安装软件时提示: 无法获得锁 /var/lib/dpkg/lock - open(11:资源暂时不可用) 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 其实报错已经给了提示了,就是有进程正在占用apt-get命令,So... 命令跑起来,找出这个进程,kill这个进程! ps -aux | grep "apt" sudo kill PID(进程编号) 检查是否还有apt进程: ps -e | grep apt 如果没有提示,则表示apt进程

  • Ubuntu中卸载Postgresql出错的解决方法

    前言 最近在卸载PostgreSQL数据库的出错了,无奈只能一步步的进行排查分析解决,下面将解决的过程分享出来,给同样遇到这个问题的朋友们参考学习,下面话不多说了,来一起看看详细的介绍吧. 出错输出: Removing postgresql-9.1 (9.1.18-0ubuntu0.12.04) ... /var/lib/dpkg/info/postgresql-9.1.prerm: 9: .: Can't open /usr/share/postgresql-common/maintscrip

  • ubuntu系统中/etc/rc.local和/etc/init.d/rc.local的区别详解

    前言 我们在ubuntu下要把一个程序加入开机启动,一般可以通过修改rc.local来完成,但ubuntu下有两个rc.local文件.分别是/etc/rc.local和/etc/init.d/rc.local.可以看一下两个文件的内容找到他俩的关系: /etc/init.d/rc.local #! /bin/sh ### BEGIN INIT INFO # Provides: rc.local # Required-Start: $all # Required-Stop: # Default-

  • ubuntu系统下C++调用matlab程序的方法详解

    前言 最近因为工作的需要在研究C++怎么调用matlab程序,发现网上的资料较少,所以将自己学习的内容总结分享出来,下面话不多说了,来一起看看详细的介绍吧. 实验平台: ubuntu  matlab R2016b   g++ 步骤: 1.    设置matlab的编译器 在命令行窗口下,输入并执行如下命令:mex –setup 在出现的编译器中,选择mex -setup C++ 然后在输入命令:mbuild –setup 同样选择mex -setup C++ -client MBUILD 2. 

  • windows系统下C++调用matlab程序的方法详解

    前言 之前已经跟大家介绍了在ubuntu系统下C++调用matlab程序的方法,需要的朋友们可以参考这篇文章,本文将给大家介绍关于windows下C++调用matlab程序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 实验平台: matlab R2016b   VS2013 思路: 1. 设置matlab的编译器,使用外部的VC或者gcc等编译器. 2. 编译m文件成dll 3. 设置VS的Include路径和lib链接库的路径 4. 编写C++调用dll 步骤:

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

    本文将介绍Linux系统下查看显卡硬件信息内容如下: 如何在ubuntu系统中查看显卡型号.(其他文章大多只介绍了命令而未介绍如何对应显卡型号) 在ubuntu系统中显卡详细信息,以及所代表的含义. 一,查看显卡型号 1,查看显卡型号命令 lspci | grep -i vga #----output------ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f06 (rev a1) 可以看到,查看到的显卡型号名称是一

  • Python调用C++程序的方法详解

    前言 大家都知道Python的优点是开发效率高,使用方便,C++则是运行效率高,这两者可以相辅相成,不管是在Python项目中嵌入C++代码,或是在C++项目中用Python实现外围功能,都可能遇到Python调用C++模块的需求,下面列举出集中c++代码导出成Python接口的几种基本方法,一起来学习学习吧. 原生态导出 Python解释器就是用C实现,因此只要我们的C++的数据结构能让Python认识,理论上就是可以被直接调用的.我们实现test1.cpp如下 #include <Pytho

  • ubuntu系统下 python链接mysql数据库的方法

    进入root 权限下 apt-get install mysql-server apt-get install mysql-client 创建数据库 mysql -u root -p passward 链接数据库 create database basename use basename 如果数据库存在要进行改动可以直接使用 mysql -u root -p passward basename 创建表 create table latest_face( id int(11) not null a

  • Win7系统下mysql 5.7.11安装教程详解

    操作系统:win7 64位旗舰版 mysql压缩包:mysql-5.7.11-winx64.zip 1. 解压MySQL压缩包 将下载的MySQL压缩包解压到自定义目录下,我的解压目录是: "D:\Program Files\mysql-5.7.11-winx64" 将解压目录下默认文件 my-default.ini 拷贝一份,改名 my.ini 复制下面的配置信息到 my.ini 保存 #如果没有my-default.ini,可自己新建my.ini或者从其他地方中获取 #######

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

    对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,但是很多Linux系统初始并没有这两个命令. 今天,我们就简单的讲解一下如何安装和使用rz.sz命令. 1.软件安装 root 账号登陆后,依次执行以下命令: cd /tmp wget http://www.ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz tar zxvf lrzsz-0.12.20.tar.gz &

  • 使用C++调用Python代码的方法详解

    一.配置python环境问题 1.首先安装Python(版本无所谓),安装的时候选的添加python路径到环境变量中 安装之后的文件夹如下所示: 2.在VS中配置环境和库 右击项目->属性->VC++目录 1)包含目录: Python安装路径/include 2)库目录: Python安装路径/libs 右击项目->属性->连接器->输入->附加依赖库 debug下: python安装目录/libs/python37_d.lib release下: python安装目录

  • LyScript获取上一条与下一条汇编指令的方法详解

    LyScript 插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScript插件API基础上自己封装实现这个功能. LyScript项目地址:https://github.com/lyshark/LyScript 获取下一条汇编指令 下一条汇编指令的获取需要注意如果是被命中的指令则此处应该是CC断点占用一个字节,如果不是则正常获取到当前指令即可. 1.我们需要检查当前内存断点

  • CentOS 7.0下使用yum安装mysql的方法详解

    CentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql,但是CentOS7的yum源中默认好像是没有mysql的.为了解决这个问题,我们要先下载mysql的repo源. 1.下载mysql的repo源 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 2.安装mysql-community-release-el7-5.noarch.rpm包 $ sudo rpm -ivh mys

随机推荐