本文原汁原味的原创!!!盗版必究!本产品已通过ISO9001国际质量体系认证!!!大印在手,天下我有!!
一: 首先进行环境变量的配置:
Think的用户变量: D:\opencv\opencv\opencv\build\x86\vc10\bin;
D:\opencv\opencv\opencv\build\common\tbb\ia32\vc10;D:\vs2010\Common7\IDE;
D:\matlab\matlab2012b\matlab2012bsetup\extern\lib\win64\microsoft;
D:\matlab\matlab 2012b\matlab2012bsetup\bin\win64; D:\opencv\opencv\opencv\build\x64\vc10\bin;
2: 工程配置:
配置属性:
包含目录:D:\matlab\matlab2012b\matlab2012bsetup\extern\include
D:\opencv\opencv\opencv\include\opencv2
D:\opencv\opencv\opencv\include D:\opencv\opencv\opencv\include\opencv
库目录: D:\matlab\matlab2012b\matlab2012bsetup\extern\lib\win64\microsoft
D:\opencv\opencv\opencv\build\x64\vc10\lib D:\opencv\opencv\tbb_debug\lib\ia32\vc10
附加包含目录:D:\matlab\matlab2012b\matlab2012bsetup\extern\include
附加库目录:D:\matlab\matlab2012b\matlab2012bsetup\extern\lib\win64\microsoft
附加依赖项: 必须包含的头文件: #include "mclmcrrt.h"
#include"mclmcr.h"
img2patch.lib
test.lib
init_templates.lib
mexLasso.lib
normalizeMat.lib
sampling.lib
setTrackParam.lib
sklm.lib
tracker.lib
warpimg.lib
libeng.lib
libmat.lib
libmex.lib 必须包含的.lib文件
libmx.lib
mclmcrrt.lib
mclmcr.lib
opencv_calib3d231d.lib
opencv_contrib231d.lib
opencv_core231d.lib
opencv_features2d231d.lib
opencv_flann231d.lib
opencv_gpu231d.lib
opencv_haartraining_engined.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib
opencv_legacy231d.lib
opencv_ml231d.lib
opencv_objdetect231d.lib
opencv_ts231d.lib
opencv_video231d.lib
二: 生成.dll .h .lib文件添加到工程中:
.m文件编好了之后在命令窗口中输入: mcc –W cpplib:warpimglib –T link:lib warpimg.m
(假设要使用warpimg.m文件)
三: 编程阶段:
1):首先.m文件内的代码必须是正确的,否则VS2010运行时会卡住,而且在C的工程中是无法调试的,所以混合编程调试相当不好调,局限性挺强的。但是调用matlab处理复杂运算挺方便的。
2):基本编程结构:
C++和matlab参数传递使用mwArray 或者mxArray函数。这里面mxArray函数的操作必须用指针,太恶心了。。。我用的mwArray函数。这个mwArray函数用法太多,上网一搜都有。
matlab的传入的参数必须和C++中的参数完全一致,输出的参数也必须一致(参数结构,个数,名称)
因为是RGB图像,所以传入matlab的图像像素得分别赋值,我是这么赋值的。。。。
所有matlab和C++的混合编程结构都是这样的,只不过参数的结构和传递的函数有差别罢了。在C中要为传入matlab的参数初始化,因为matlab中的参数都是矩阵结构,所以C中通过mwArray函数创建的参数也是矩阵结构,比如说一个整数也得是1*1结构的矩阵。C中其他的参数要与传入matlab的参数赋值的话需要通过SetData()函数。。还有其他的一些函数来进行传递,即mwArray结构的参数与其他类型的参数比如说int char* 等等类型的相互转换。matlab处理后输出的参数在C中进行处理得到你想要的结果。
具体给了你一个结构体参数的程序