MATLAB和C/C++混合编程实现图像处理(一)

来源:互联网 发布:iphonex监控预约软件 编辑:程序博客网 时间:2024/04/30 04:11

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 引擎。

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
原创粉丝点击