MATLAB和C/C++混合编程实现图像处理(一)
来源:互联网 发布:c语言程序的注释是 编辑:程序博客网 时间:2024/05/17 04:34
[置顶] MATLAB和C/C++混合编程实现图像处理(一)
版权声明:本文为博主原创文章,未经博主允许不得转载。
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);
(3)读写 Matlab 数据
从 Matlab 引擎工作空间中获取变量;
- mxArray *engGetVariable(Engine *ep, const char *name);
(4)创建和清除 mxArray 型数据
Matlab 有很多种变量类型,对应于每种类型,基本上都有一个函数用于创建,但它们都有相同的数据结构,就是 mxArray ,数组的建立采用mxCreatexxx 形式的函数,例如新建一个double 类型数组,可用函数mxCreateDoubleMatrix ,函数形式如下:
- mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag);
例如,创建一个 3 行 5 列的二维实数数组,可用如下语句:
- mxArray *T = mxCreateDoubleMatrix(3, 5, mxREAL);
- void mxDestroyArray(mxArray *array_ptr);
要删除上面创建的数组 T ,可用如下语句:
- mxDestroyArray(T);
- 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
- MATLAB和C/C++混合编程实现图像处理(一)
- MATLAB和C/C++混合编程实现图像处理(一)
- Matlab和C混合编程
- c和matlab混合编程
- C和MATLAB混合编程
- matlab和C混合编程实现脉冲压缩
- matlab和C混合编程实现脉冲压缩
- Matlab C混合编程
- matlab C混合编程
- Matlab C混合编程
- matlab/C 混合编程
- matlab与c(c++)混合编程
- matlab与c混合编程实现方法
- matlab 和c混合编程-------------------基础
- Matlab 和 C/C++混合编程
- matlab和C/C++混合编程--Mex
- matlab和C/C++混合编程--Mex
- Matlab和C混合编程举例
- Struts2入门
- 1079. Total Sales of Supply Chain (25)
- 策略模式(Strategy Pattern)
- #ifdef,#else,#endif,#if用法详解
- Anaconda安装keras简记
- MATLAB和C/C++混合编程实现图像处理(一)
- qt之tcp(一)
- 5月10日云栖精选夜读:阿里专家直击前端盛会JSConf2017_Day2:见证Moment.js精彩分享
- AJAX 跨域的常见方法
- 机器学习正则化相关讲解
- java 汉字转拼音
- 子线程使用Toast报错
- INNO setup打包的一段界面美化的code端代码
- [iOS]查看苹果支持的所有字库