MATLAB和C/C++混合编程实现图像处理(一)
2015-11-13 22:22
483 查看
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 引擎的代码如下:
(2)向 Matlab
发送命令字符串
engEvalString
-发送命令让 Matlab 执行;
(3)读写
Matlab 数据
从
Matlab 引擎工作空间中获取变量;
(4)创建和清除
mxArray 型数据
Matlab
有很多种变量类型,对应于每种类型,基本上都有一个函数用于创建,但它们都有相同的数据结构,就是 mxArray ,数组的建立采用mxCreatexxx 形式的函数,例如新建一个double 类型数组,可用函数mxCreateDoubleMatrix ,函数形式如下:
例如,创建一个
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);
一、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);
相关文章推荐
- MATLAB和C/C++混合编程实现图像处理(一)
- matlab从图片中简单识别红色物体
- Matlab矩阵的按列存储理解
- matlab控制图像的边界(margin),subplot的间距(gap)
- matlab字符函数
- 带色彩恢复的视网膜增强算法实现 (MATLAB版本)
- 梯度下降法 matlab
- 机器学习 最小二乘学习法 matlab
- matlab学习笔记(六)---空域变换增强-直方图处理
- matlab学习笔记(五)---空域变换增强-直接灰度调整
- OpenCV中的Image Watch,VS2013像matlab一样方便查看图像Mat像素值等
- 小波变换图像处理
- 关于matlab的hist函数取之后的折线
- Matlab中如何将(自定义)函数作为参数传递给另一个函数
- matlab:矩阵中对NaN的处理方式
- Matlab计算运行时间方法
- 【图像处理】Matlab使用技巧
- kmeans聚类算法及matlab实现
- matlab中的图放到viso进行编辑的办法
- matlab去掉坐标