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编辑器