
版权声明:本文为博主原创文章,未经博主允许不得转载。
MATLAB具有丰富的图像处理函数库,运算速度慢,特别是在多重循环的情况下,不适合直接应用于工程当中。如果能把MATLAB和另一种适合工程的编程语言结合到一起运用到数字图像处理领域,则会更加方便的进行图像处理,MATLAB和C/C++的混合编程,既继承了MATLAB的优点,又拥有了C/C++运算速度快、适合工程应用的特点。
一、MATLAB引擎与运行环境配置
1.MATLAB引擎
MATLAB引擎包含了所需要的运行库,允许C/C++来调用MATLAB内部的函数进行编程。MATLAB引擎是一种独立的C/C++程序,可以通过相应的接口在Windows系统上使用,是在一个单独的进程中运行的,不会拖慢主进程的运行速度。MATLAB引擎提供了一系列函数,允许用户在程序里启动或者结束调用MATLAB的进程,给MATLAB进程发送指令以及给MATLAB发送数据或者从MATLAB中得到数据。
通过MATLAB引擎,用户可以在C/C++程序中调用MATLAB内的数学处理函数,比如傅里叶变换函数,也可以通过plot函数进行绘图。
2.MATLAB引擎的重要函数
在C/C++程序中使用MATLAB函数,首先要包含MATLAB引擎头文件engine.h, 只有这样,C/C++程序才能正确的识别MATLAB引擎函数。
(1)引擎的打开和关闭
Engine *engOpen(const char *startcmd);
参数 startcmd 是用来启动 Matlab 引擎的字符串参数,在 Windows 操作系统中只能为 NULL ,函数返回值是一个 Engine 类型的指针,它是在 engine.h 中定义的 engine 数据结构。
int engClose(Engine *ep);
参数 ep 代表要被关闭的引擎指针,函数返回值为 0 表示关闭成功,返回 1 表示发生错误。
例如,通常用来打开 / 关闭 Matlab 引擎的代码如下:
- Engine *ep; // 定义 Matlab 引擎指针。
- if (!(ep=engOpen(NULL))) // 测试是否启动 Matlab 引擎成功。
- {
- MessageBox("Can't start Matlab engine!" );
- exit(1);
- }
- …………
- engClose(ep); // 关闭 Matlab 引擎。
Engine *ep; // 定义 Matlab 引擎指针。
if (!(ep=engOpen(NULL))) // 测试是否启动 Matlab 引擎成功。
{
MessageBox("Can't start Matlab engine!" );
exit(1);
}
…………
engClose(ep); // 关闭 Matlab 引擎。
( 2)向 Matlab 发送命令字符串
engEvalString -发送命令让 Matlab 执行;
int engEvalString(Engine *ep, Const char *string);
参数 ep 为函数 engOpen 返回的引擎指针,字符串 string 为要 matlab 执行的命令,
函数返回值为 0 表示成功执行,返回 1 说明执行失败(如命令不能被 Matlab 正确解释或 Matlab 引擎已经关闭了)。
(3)读写 Matlab 数据
从 Matlab 引擎工作空间中获取变量;
mxArray *engGetVariable(Engine *ep, const char *name);
参数 ep 为打开的 Matlab 引擎指针, mp 为指向被写入变量的指针, name 为变量写入后在 Matlab 引擎工作空间中的变量名,函数返回值为 0 表示写入变量成功,返回值为 1 表示发生错误。
(4)创建和清除 mxArray 型数据
Matlab 有很多种变量类型,对应于每种类型,基本上都有一个函数用于创建,但它们都有相同的数据结构,就是 mxArray ,数组的建立采用mxCreatexxx 形式的函数,例如新建一个double 类型数组,可用函数mxCreateDoubleMatrix ,函数形式如下:
mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);
参数 m 和 n 为矩阵的函数和列数。 ComplexFlag 为常数,用来区分矩阵中元素是实数还是复数,取值分别为 mxREAL 和 mxCOMPLEX 。
例如,创建一个 3 行 5 列的二维实数数组,可用如下语句:
mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);
对应的,要删除一个数组mxDestroyArray ,该函数声明如下:
void mxDestroyArray(mxArray *array_ptr);
参数 array_ptr 为要删除的数组指针;
要删除上面创建的数组 T ,可用如下语句:
mxDestroyArray(T);
创建一个字符串类型并初始化为 str 字符串:
mxArray *mxCreateString(const char *str);
-
顶
- 1
-
踩
- 0
- 上一篇vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- 下一篇LeetCode19:Remove Nth Node From End of List
我的同类文章
- •经典算法——合并K个有序链表2016-06-01
- •经典算法——合并两个有序链表2016-05-06
- •经典算法——堆排序笔试题2016-04-21
- •经典算法——子矩阵的最大累加和问题2016-04-16
- •经典算法——单链表反转的递归方法和非递归方法2016-04-08
- •经典算法——Jump Game2016-04-08
- •华为2016实习笔试编程题--生日礼物2016-05-28
- •经典算法——链表中环的入口结点2016-04-22
- •经典算法——字符流中第一个不重复的字符2016-04-21
- •经典算法——数组的循环右移K位2016-04-15
- •经典算法——Jump Game(II)2016-04-08