Matlab与C++混编注记,通过C++运行matlab脚本处理数据。
第一章 配置环境
对于正常安装Matlab的
1. 添加包含目录 /extern/include
2.添加库目录 /extern/lib/win64/microsoft
3.添加库引用
#pragma comment(lib, "libeng.lib") #pragma comment(lib, "libmx.lib") #pragma comment(lib, "libmat.lib") #pragma comment(lib, "libmex.lib")
4.添加环境变量 /bin/win64
5.程序中包含<engine.h>头文件
X. 注册
对于安装绿色版,或者直接解压matlab的,或者使用mcr的,需要进行注册,如果在64位机上解压32位库,也需要注册引擎
1. 进入bin文件夹,运行 matlab /regserver
2. 注册之后在进行上述五项操作
第二章 引擎简介
在程序运行时会弹出如图所示的白色Matlab命令行窗口,可以在该窗口中查看工作区或者进行调试。
第三章 函数手册
1.打开引擎:engOpen
2.关闭引擎:engClose
3.显示或隐藏Matlab引擎:engSetVisible(需要在打开的窗口调试matlab时可以打开)
4.获取工作空间的变量:engGetVariable
5.将变量存入工作区:engPutVariable
6.执行Matlab命令:engEvalString
7.使用mxArray结构
代码演示:
void OpenMatlab(){
if (!(g_Ep = Matlab::engOpen(nullptr))){
std::cout << "engOpen failed" << std::endl;
return;
}
Matlab::engSetVisible(g_Ep, algparam.showprocess);
Matlab::engEvalString(g_Ep, "cd F:\\MATLAB\\calibration");
Matlab::engEvalString(g_Ep, "addpath(\'D:\\Program Files\\MATLAB\\R2016a\\toolbox\\calib')");
Matlab::engEvalString(g_Ep, "clear");
Matlab::engEvalString(g_Ep, "load('Calib_Results_stereo.mat')");
}
void CloseMatlab(){
Matlab::engClose(g_Ep);
}
vector<cv::Point3d> stereoTriangulation(vector<pair<Ipoint, Ipoint>>& matches){
OpenMatlab();
Matlab::mxArray* leftPoint = Matlab::mxCreateDoubleMatrix(2, matches.size(), Matlab::mxREAL);
Matlab::mxArray* rightPoint = Matlab::mxCreateDoubleMatrix(2, matches.size(), Matlab::mxREAL);
for (int i = 0; i < matches.size(); ++i){
Matlab::mxGetPr(leftPoint)[2 * i] = matches[i].first.x;
Matlab::mxGetPr(leftPoint)[2 * i + 1] = matches[i].first.y;
Matlab::mxGetPr(rightPoint)[2 * i] = matches[i].second.x;
Matlab::mxGetPr(rightPoint)[2 * i + 1] = matches[i].second.y;
}
Matlab::engPutVariable(g_Ep, "xL", leftPoint);
Matlab::engPutVariable(g_Ep, "xR", rightPoint);
Matlab::engEvalString(g_Ep, "[XL, XR] = stereo_triangulation(xL, xR, om, T, fc_left, cc_left, kc_left, alpha_c_left, fc_right, cc_right, kc_right, alpha_c_right); ");
Matlab::mxArray* xL = Matlab::engGetVariable(g_Ep, "XL");
Matlab::mxArray* xR = Matlab::engGetVariable(g_Ep, "XR");
vector<cv::Point3d> pointsL(matches.size()), pointsR(matches.size());
for (int i = 0; i < matches.size(); ++i){
pointsL[i].x = Matlab::mxGetPr(xL)[3 * i + 0];
pointsL[i].y = Matlab::mxGetPr(xL)[3 * i + 1];
pointsL[i].z = Matlab::mxGetPr(xL)[3 * i + 2];
pointsR[i].x = Matlab::mxGetPr(xR)[3 * i + 0];
pointsR[i].y = Matlab::mxGetPr(xR)[3 * i + 1];
pointsR[i].z = Matlab::mxGetPr(xR)[3 * i + 2];
}
Matlab::mxDestroyArray(leftPoint);
Matlab::mxDestroyArray(rightPoint);
CloseMatlab();
return pointsL;
}
OK,See You Next Chapter!

问下您matlab中的代码如何设置的高亮表示,就是看着很舒服,不知道用的什么插件,求分享
用Sublime Text的MATLAB高亮设置就可以,或者直接用Sublime Text编辑器