第一步:
在Halcon中编写相关的程序,本文采用了读图显示、截图显示的小程序进行测试,代码如下:


接着讲Halcon程序导出为C++-Halcon/C++

导出的保存为img_cut.cpp(自定义)文件,用VS2013打开,主要程序如下:


为了能够在VS中调用Halcon的程序算子,需先对VS进行相关环境的配置(另有文档进行说明)
第二步:
在VS中编写Matlab的接口程序,主要函数为:

(matlab直接调用执行mexfunction函数内部的程序)
各参数意义为:
Int nlhs:输出参数的个数
mxArray*:输出数据
int nrhs:输入参数的个数
mxArray*:输入数据
总程序如下:
创建名为mex_test的空项目(本例子的路径为:D:我的文档Visual Studio 2013Projectsmex_testmex_test):

创建mex_test.cpp源文件,并进行编写


其中:
1、“mex.h”包含了matlab与C++的接口程序算子(需对VS进行相应的配置)

右键mex_test项目/属性/C/C++/常规/附加包含目录
此处添加matlab外部接口的头文件,即把matlab安装目录下的…/extern/include添加进来。
2、action()函数是由Halcon导出的执行函数,需要进行部分改动,以便更好的人机交互:

编写完VS的程序,点击生成解决方案,此时会提示1个error3个waring

此时mex_test.cpp已经编译完成,故未定义入口点并不影响
第三步:
对matlab进行相关的API配置:
在matlab的命令行窗口输入:

则会出现:

鼠标点击mex -setup C++:与C++编译器建立链接,点击之后出现

(本例子中是使用了matlab2014以及VS2013)
第四步:
对matlab进行接口程序的编写:
创建.m文本,并命名为readImg

本例子中的readImg.m路径为 D:我的文档MATLAB

其中各函数说明如下:
1、copyfile(fullfile('D:','我的文档','Visual Studio 2013','projects','mex_test','mex_test','mex_test.cpp'),'.','f');
将D:我的文档Visual Studio 2013Projectsmex_testmex_test文件夹中mex_test.cpp复制到matlab当前文件夹中

2、ipath=['-I' fullfile('F:','halcon','include')];
将‘-I’参数与halcon的头文件(都放在include中)进行串联,形成-I参数
3.lapacklib=fullfile('F:','halcon','lib','x86sse2-win32','halconcpp.lib');
将F:halconlibx86sse2-win32文件夹中的haconcpp.lib复制给lapacklib
4、mex('-v','-largeArrayDims',ipath,'mex_test.cpp',lapacklib); 创建mex函数的编译环境--相关参数意义如下:
‘-v’:默认值即可
‘-largeArrayDims’:matlab中处理数据的方式,halcon对应选择该选项即可
‘ipath’:与‘-I’参数串联的头文件路径
‘mex_test.cpp’:所需调用的Halcon—C++程序名称(若没有步骤1则需要将mex_test.cpp源文件手动添加到matlab当前文件夹)
‘lapacklib’:halcon的库路径
以上4步完成了matlab中mex接口的环境配置,接下来直接输入mex_test即可
注意:matlab直接调用的是cpp的函数名,而不是mexfunction函数,mexfunction只是一个接口程序
5、本例子是在m文件中编写,一步运行即可

运行结果为:


此时直接在命令行输入mex_test(所调用函数的函数名),matlab会依次显示:

