提供 mex_opencv(src) 函數,在 Matlab 中一鍵編譯連結 OpenCV 的 C++ MEX 檔案。
function mex_opencv(src)
ARC = 'x64';
BIN_PATH = ['D:\libs\opencv\3.4.10\' , ARC , '\vc12.0\bin'];
INC_OPT = '-ID:\libs\opencv\3.4.10\include\opencv ';
INC_OPT = [INC_OPT, '-ID:\libs\opencv\3.4.10\include '];
LIB_PATH = ['D:\libs\opencv\3.4.10\' , ARC , '\vc12.0\lib'];
LIBS = '';
LIBS_ORG = dir([LIB_PATH, '\*.lib']);
for i = 1:numel(LIBS_ORG)
CUR_LIB = strtrim(LIBS_ORG(i).name);
if (CUR_LIB(end-4) ~= 'd') % 排除 Debug 库
LIBS = [LIBS, '-l', CUR_LIB, ' '];
end
end
LIB_OPT = ['-L', LIB_PATH, ' ', LIBS];
% Boost 支援
INC_OPT = [INC_OPT, ' ', '-ID:\libs\boost\1.57.0 '];
LIB_OPT = [LIB_OPT, ' ', '-LD:\libs\boost\1.57.0\stage\lib\vc12.0', ARC, ' '];
compile_cmd = ['mex -v -O ', INC_OPT, LIB_OPT, ' ', src];
eval(compile_cmd);
% 設定運行時 PATH
PATH_STR = getenv('PATH');
if (numel(strfind(PATH_STR, 'opencv')) == 0)
setenv('PATH', [BIN_PATH, ';', PATH_STR]);
end
end
BIN_PATH, INC_OPT, LIB_PATH, Boost 路徑。mex_opencv('your_file.cpp')。*d.lib,連結 Release 库。