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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

Matlab与C/C++混合编程调用OpenCV

發布時間:2023/12/20 c/c++ 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Matlab与C/C++混合编程调用OpenCV 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

***************************************************

更多精彩,歡迎進入:http://shop115376623.taobao.com

http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-9510581626.24.ZO6sko&id=43401674106
精通MATLAB混合編程視頻講解
MATLAB各類函數視頻講解
基于MATLAB的高等數學問題求解?
MATLAB函數速查視頻講解
面向對象C++視頻教程

精通MATLAB混編編程demo及PDF?

QQ:2911984429

http://item.taobao.com/item.htm?spm=a1z10.5-c.w4002-9510581626.24.ZO6sko&id=43401674106


***************************************************


原文來自:http://blog.csdn.net/raodotcong/article/details/8785358 ?【其自創很多】

好久沒寫博客了,今天一個師兄問到了一個關于在Matlab與C/C++混合編程時,使用OpenCV庫的編譯問題,所以借此機會總結成文字分享一下過程。

? ? ? 在使用Matlab編譯包含OpenCV庫的代碼之前,首先假設下面的幾項工作已經完成。

? ? ?第一步: 1)下載并解壓某個版本的OpenCV至硬盤的某個目錄上,并將其運行時庫添加到環境變量中。


? 第二步: ? ?2)安裝了某個版本的VC編譯器,并使用Matlab的mex -setup命令,選擇該版本的編譯器作為默認編譯器。


? ? 第三步: ?3)編寫好包含OpenCV庫的Matlab與C/C++混合編程代碼。

[cpp]?view plaincopy
  • #include?<iostream>??
  • #include?<string>??
  • ??
  • #include?<opencv/cv.h>??
  • #include?<opencv/highgui.h>??
  • ??
  • #include?"mex.h"??
  • ??
  • //?Matlab?entry?point?function??
  • void?mexFunction(?int?nlhs,?mxArray?*plhs[],?int?nrhs,?const?mxArray*prhs[]?)??
  • {??
  • ????//?Check?if?the?input?argument?is?legal??
  • ????if?(?nrhs?!=?1?||?!mxIsChar(?prhs[0]?)?)??
  • ????{??
  • ????????mexErrMsgTxt("An?image?name?should?be?given.\n");??
  • ????}??
  • ??????
  • ????//?Get?the?name?of?the?image??
  • ????int?nStringLen;??
  • ????nStringLen?=?mxGetNumberOfElements(prhs[0]);??
  • ????std::string?szImageName;??
  • ????szImageName.resize(?nStringLen?+?1?);??
  • ??????
  • ????mxGetString(?prhs[0],?&szImageName[0],?nStringLen?+?1?);??
  • ??????
  • ????//?Read?the?image?from?file??
  • ????cv::Mat?image;??
  • ????image?=?cv::imread(?szImageName?);??
  • ??????
  • ????//?Show?the?image?if?it?is?successfully?read?from?disk??
  • ????if?(?!image.empty()?)??
  • ????{??
  • ????????cv::imshow(?"Test?Mex?OpenCV",?image?);??
  • ????}??
  • ????else??
  • ????{??
  • ????????mexErrMsgTxt("The?specified?image?does?not?exist.\n");??
  • ????}??
  • }??
  • ? ? ? 在做好以上的準備工作之后,就可以開始進行代碼的編譯了。編譯代碼時仍然是在Matlab命令行下使用mex命令進行編譯,不過不同的是需要在編譯時指明OpenCV的頭文件、靜態庫文件所在的目錄,以及需要鏈接的OpenCV庫的名稱。這個部分與在Linux下面使用gcc或者g++進行代碼編譯是類似的,下面以目前最新的OpenCV 2.4.4庫為例子,展示一下如何編寫編譯選項的參數,假設上面的代碼存放在名為OpenCVShowImage.cpp的源文件中。在Matlab的Command Line窗口中,我們可以輸入以下參數來進行上面代碼的編譯。

    [plain]?view plaincopy
  • mex?OpenCVShowImage.cpp?-IF:\3rdlibs\OpenCV\include?-LF:\3rdlibs\OpenCV\lib?-lopencv_core244?-lopencv_imgproc244?-lopencv_highgui244??
  • ? ? ? 其中:

    -IF:\3rdlibs\OpenCV\include,告訴編譯器可以在F:\3rdlibs\OpenCV\include這個目錄進行頭文件的查找;

    -LF:\3rdlibs\OpenCV\lib,告訴鏈接器可以在F:\3rdlibs\OpenCV\lib這個目錄進行庫文件的查找;

    最后三個參數表面我們寫的源代碼需要鏈接opencv_core244、opencv_imgproc244和opencv_highgui244這三個OpenCV的靜態庫。

    ? ? ? 在執行完畢上面的命令之后,當前目錄下面就會生成一個OpenCVShowImage.mexw64(或32)的文件,具體的文件名由操作系統是64位還是32位來決定。需要注意的是,如果當前的操作系統是64位的,則在環境變量F:\3rdlibs\OpenCV\bin中以及庫文件目錄F:\3rdlibs\OpenCV\lib中,必須放置的也是64位版本的OpenCV動態庫和靜態庫。最后便可以使用OpenCVShowImage這個函數了,下面是運行這個函數的結果。


    ? ? ? 如此一來整個編譯過程便結束了,下面也順便列一下mex相關編譯選項的含義。

    ? ? ? -Ipathname

    ? ? ??Add pathname to the list of folders tosearch for #include files.

    ? ? ??Do not add a space after this switch.

    ? ? ??-lname

    ? ? ??Link with object library. On Windows systems, name expands to name.lib or libname.lib and on UNIX systems, tolibname.so or libname.dylib.

    ? ? ??Do not add a space after this switch.

    ? ? ??-Lfolder

    ? ? ??Add folder to the list of folders to searchfor libraries specified with the -l option. On UNIX systems, you must also setthe run-time library path, as explained in Setting Run-Time Library Path.

    ? ? ? 最后也順便提及一下,在日本有個學生也自己封裝一個Matlab版本的OpenCV庫,相關的資料可以在http://www.cs.stonybrook.edu/~kyamagu/mexopencv/這個地方看到。

    總結

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

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