日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Matlab-OpenCV-VC-混合编程配置

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab-OpenCV-VC-混合编程配置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

需要在Matlab2017a中使用包含有OpenCV2.4.9的C++文件。網上看了很多教程,但沒有完整的清楚的教程,本篇教程,希望能彌補。

總的來說可以分為三步:

第一步:Matlab中配置Visual Studio C++的編譯器

第二步:include OpenCV相關的庫

第三步:寫出相應的.CPP文件。

第一步:Matlab中配置Visual Studio C++的編譯器

打開Matlab在命令行輸入以下命令:

mex -setup -v會出來如下信息: 詳細模式已開。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft SDK 7.1 (C)'... ... 正在查找環境變量 'ICPP_COMPILER14'...否。 ... 正在查找環境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環境變量 'ICPP_COMPILER14'...否。 ... 正在查找環境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環境變量 'ICPP_COMPILER14'...否。 ... 正在查找環境變量 'ICPP_COMPILER13'...否。 找不到已安裝的編譯器 'Intel C++ Composer XE 2013 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft SDK 7.1 (C)'... ... 正在查找環境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環境變量 'ICPP_COMPILER15'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2015 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft SDK 7.1 (C)'... ... 正在查找環境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環境變量 'ICPP_COMPILER16'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2016 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft SDK 7.1 (C)'... ... 正在查找環境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft SDK 7.1 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2012 (C)'... ... 正在查找環境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2012 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2013 (C)'... ... 正在查找環境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2013 (C)'。 ... 正在查找編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2015 (C)'... ... 正在查找環境變量 'ICPP_COMPILER17'...否。 找不到已安裝的編譯器 'Intel Parallel Studio XE 2017 with Microsoft Visual Studio 2015 (C)'。 ... 正在查找編譯器 'MinGW64 Compiler (C)'... ... 正在查找環境變量 'MW_MINGW64_LOC'...否。 找不到已安裝的編譯器 'MinGW64 Compiler (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2012 (C)'... ... 正在查找注冊表設置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 11.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2012 (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2013 Professional (C)'... ... 正在查找注冊表設置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 12.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2013 Professional (C)'。 ... 正在查找編譯器 'Microsoft Visual C++ 2015 Professional (C)'... ... 正在查找注冊表設置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 14.0...否。 找不到已安裝的編譯器 'Microsoft Visual C++ 2015 Professional (C)'。 ... 正在查找編譯器 'Microsoft Windows SDK 7.1 (C)'... ... 正在查找注冊表設置 'HKLM\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1' InstallationFolder...否。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v7.1' InstallationFolder...否。 找不到已安裝的編譯器 'Microsoft Windows SDK 7.1 (C)'。

注:這是Matlab在尋找相關的編譯器,但是一般由于VS安裝路徑不是默認路徑,所以會出現找不到編譯器。

這個時候網上有的教程會讓你安裝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文件的作用就是記錄對應版本的相關VS文件的位置。如果恰好沒有你的版本,比如VS2017,你可以去Mathworks官方網站下載,但是如果你沒有賬號,那就可以用一下我下載過的吧: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>

可以根據xml文件最后的env中的path路徑反推出上文中應該添加的路徑。MSVC和MSVCPP都做同樣修改。

再次運行:mex -setup -v
結果中有很多是,表示配置好了C++的編譯器

正在查找注冊表設置 'HKLM\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 15.0...否。 ... 正在查找注冊表設置 'HKCU\SOFTWARE\Microsoft\VisualStudio\SxS\VS7' 15.0...否。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7' 15.0...是('D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\')。 ... 正在查找文件 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat'...是。 ... 正在查找文件夾 'D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build'...是。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10...是('D:\Windows Kits\10\')。 ... 正在查找注冊表設置 'HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows Kits\Installed Roots' KitsRoot10...是('D:\Windows Kits\10\')。 ... 正在執行命令 'echo off&set "sdkversion="&(for /f %a IN ('dir "D:\Windows Kits\10\include\" /b /ad-h /on') do ( @if exist "D:\Windows Kits\10\include\%a\ucrt\" set "sdkversion=%a" ))&call echo %sdkversion%'...是('10.0.18362.0')。 找到已安裝的編譯器 'Microsoft Visual C++ 2017 (C)'。 MEX 配置為使用 'Microsoft Visual C++ 2017 (C)' 以進行 C 語言編譯。 警告: MATLAB C 和 Fortran API 已更改,現可支持包含 2^32-1 個以上元素的 MATLAB 變量。您需要更新代碼以利用新的 API。您可以在以下網址找到更多的相關信息:http://www.mathworks.com/help/matlab/matlab_external/upgrading-mex-files-to-use-64-bit-api.html。要選擇不同的語言,請從以下選項中選擇一種命令:mex -setup C++ mex -setup FORTRAN

檢驗,打開文件

D:\Program Files\MATLAB\R2017a\extern\examples\mex\mexcpp.cpp

也可以自己寫.cpp文件,遵照一些規則,參考: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 = 2

ok!第一步結束。

第二步配置OpenCV

繼續在Matlab命令行中輸入以下命令:

mex -v mexcpp.cpp

在輸出中找到文件:mex_C++_win64.xml

可以在上面的命令行輸出結果中找到以下行代碼:

Options file: C:\Users\Antime\AppData\Roaming\MathWorks\MATLAB\R2017a\mex_C++_win64.xml

用編輯器打開文件mex_C++_win64.xml,在末尾的環境變量做如下配置,

<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\" />

注意配置中做好各種細節,比如分號,\等的符號。

第三步寫一個測試文件:

#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;}

繼續max 生成文件,即可以了

測試文件頭應該要包含庫,但這樣做太難受了,應該有簡單方法。

參考資料:

https://blog.csdn.net/cfqcfqcfqcfqcfq/article/details/63295746?utm_source=blogxgwz1

https://blog.csdn.net/zjsmdchen/article/details/78317366

總結

以上是生活随笔為你收集整理的Matlab-OpenCV-VC-混合编程配置的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。