Matlab-OpenCV-VC-混合编程配置
需要在Matlab2017a中使用包含有OpenCV2.4.9的C++文件。網(wǎng)上看了很多教程,但沒有完整的清楚的教程,本篇教程,希望能彌補。
總的來說可以分為三步:
第一步:Matlab中配置Visual Studio C++的編譯器
第二步:include OpenCV相關(guān)的庫
第三步:寫出相應(yīng)的.CPP文件。
第一步:Matlab中配置Visual Studio C++的編譯器
打開Matlab在命令行輸入以下命令:
mex -setup -v會出來如下信息: 詳細模式已開。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft SDK 7.1 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER14'...否。 ... 正在查找環(huán)境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER14'...否。 ... 正在查找環(huán)境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER14'...否。 ... 正在查找環(huán)境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft SDK 7.1 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft SDK 7.1 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft SDK 7.1 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環(huán)境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'MinGW64 Compiler (C)'... ... 正在查找環(huán)境變量 'MW_MINGW64_LOC'...否。 找不到已安裝的編譯器 'MinGW64 Compiler (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2012 (C)'... ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2012 (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2013 Professional (C)'... ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2013 Professional (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2015 Professional (C)'... ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設(shè)置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2015 Professional (C)'。 ... 正在查找編譯器 'Microsoft Windows SDK 7.1 (C)'... ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1' InstallationFolder...否。 ... 正在查找注冊表設(shè)置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.1' InstallationFolder...否。 找不到已安裝的編譯器 'Microsoft Windows SDK 7.1 (C)'。注:這是Matlab在尋找相關(guān)的編譯器,但是一般由于VS安裝路徑不是默認路徑,所以會出現(xiàn)找不到編譯器。
這個時候網(wǎng)上有的教程會讓你安裝Min_gCC之類的C++編譯器,但是實際上如果我們安裝了VS之后,我們肯定有C++的編譯器的。
我們只需要告訴Matlab,VS的C++編譯器在哪里就可以了
找到Matlab的安裝目錄,并打開mexopts文件夾。我的路徑如下:
D:\Program Files\MATLAB\R2017a\bin\win64\mexopts可以看到里面有很多XML文件,比如:
msvc2012.xml msvc2013.xml msvc2015.xml msvcpp2012.xml msvcpp2013.xml msvcpp2015.xml這幾個XML文件的作用就是記錄對應(yīng)版本的相關(guān)VS文件的位置。如果恰好沒有你的版本,比如VS2017,你可以去Mathworks官方網(wǎng)站下載,但是如果你沒有賬號,那就可以用一下我下載過的吧:http://chenandongtime.github.io/tools/attachment_1487958_17a_win64_2017-05-10.zip
下載之后把2017的兩個xml文件解壓到上面的文件夾,并用記事本或其他工具打開一個MSVCPP2017.xml找到VCROOT目錄
<VCROOT><and><or><hklmExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="15.0" /><hkcuExists path="SOFTWARE\Microsoft\VisualStudio\SxS\VS7" name="15.0" /><hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="15.0" /><hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="15.0" /></or><fileExists name="$$\VC\bin\amd64\cl.exe" /><dirExists name="$$\..\.." /></and> </VCROOT>對Path路徑修改,修改到你自己的VS安裝路徑,我的修改后如下: <VCROOT><and><or><hklmExists path="D:\Program Files (x86)\Microsoft Visual Studio\2017\Community" name="14.0" /><hkcuExists path="D:\Program Files (x86)\Microsoft Visual Studio\2017\Community" name="14.0" /><hklmExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="14.0" /><hkcuExists path="SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7" name="14.0" /></or><fileExists name="$$\VC\bin\amd64\cl.exe" /><dirExists name="$$\..\.." /></and> </VCROOT>可以根據(jù)xml文件最后的env中的path路徑反推出上文中應(yīng)該添加的路徑。MSVC和MSVCPP都做同樣修改。
再次運行:mex -setup -v
結(jié)果中有很多是,表示配置好了C++的編譯器
檢驗,打開文件
D:\Program Files\MATLAB\R2017a\extern\examples\mex\mexcpp.cpp也可以自己寫.cpp文件,遵照一些規(guī)則,參考:https://blog.csdn.net/zouxy09/article/details/20553007
運行:
>> mex mexcpp.cpp 使用 'Microsoft Visual C++ 2017' 編譯。 MEX 已成功完成。>> mexcpp(1,2)The initialized data in object: Value1 = 0 Value2 = 0After setting the object's data to your input: Value1 = 1 Value2 = 2ok!第一步結(jié)束。
第二步配置OpenCV
繼續(xù)在Matlab命令行中輸入以下命令:
mex -v mexcpp.cpp在輸出中找到文件:mex_C++_win64.xml
可以在上面的命令行輸出結(jié)果中找到以下行代碼:
Options file: C:\Users\Antime\AppData\Roaming\MathWorks\MATLAB\R2017a\mex_C++_win64.xml用編輯器打開文件mex_C++_win64.xml,在末尾的環(huán)境變量做如下配置,
<env PATH="原屬性值;E:\download\opencv\build\x64\vc12\bin"INCLUDE="原屬性值;E:\download\opencv\build\include;E:\download\opencv\build\include\opencv2;E:\download\opencv\build\include\opencv"LIB="原屬性值;E:\download\opencv\build\x64\vc12\lib\"LIBPATH="原屬性值;E:\download\opencv\build\x64\vc12\lib\" />注意配置中做好各種細節(jié),比如分號,\等的符號。
第三步寫一個測試文件:
#pragma comment( lib, "opencv_core249.lib") #pragma comment( lib, "opencv_calib3d249.lib") #pragma comment( lib, "opencv_contrib249.lib") #pragma comment( lib, "opencv_features2d249.lib") #pragma comment( lib, "opencv_flann249.lib") #pragma comment( lib, "opencv_gpu249.lib") #pragma comment( lib, "opencv_highgui249.lib")#pragma comment( lib, "opencv_imgproc249.lib") #pragma comment( lib, "opencv_legacy249.lib") #pragma comment( lib, "opencv_ml249.lib") #pragma comment( lib, "opencv_nonfree249.lib") #pragma comment( lib, "opencv_objdetect249.lib") #pragma comment( lib, "opencv_ocl249.lib") #pragma comment( lib, "opencv_photo249.lib")#pragma comment( lib, "opencv_stitching249.lib") #pragma comment( lib, "opencv_superres249.lib") #pragma comment( lib, "opencv_ts249.lib") #pragma comment( lib, "opencv_video249.lib") #pragma comment( lib, "opencv_videostab249.lib")#include"mex.h"#include <opencv/cv.h> #include <opencv2/highgui/highgui.hpp>void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {char name[256];int buflens =mxGetNumberOfElements(prhs[0]);mxGetString(prhs[0], name, buflens+1);if(!mxIsChar(prhs[0])){mexErrMsgTxt("First parameter must be string/n");return ;}mexPrintf(name);IplImage * img = cvLoadImage(name);if(img->imageData == NULL){mexErrMsgTxt("Error in image/n");return;}cvNamedWindow("test");cvShowImage("test",img);cvWaitKey(0);return;}繼續(xù)max 生成文件,即可以了
測試文件頭應(yīng)該要包含庫,但這樣做太難受了,應(yīng)該有簡單方法。
參考資料:
https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/63295746?utm_source=blogxgwz1
https://blog.csdn.net/zjsmdchen/article/details/78317366
總結(jié)
以上是生活随笔為你收集整理的Matlab-OpenCV-VC-混合编程配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hough变换原理
- 下一篇: OpenGL:着色器shader