最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

windows系統(tǒng)下C++調(diào)用matlab程序的方法詳解

 更新時(shí)間:2017年08月27日 11:50:45   作者:MachineLP  
這篇文章主要給大家介紹了關(guān)于在windows系統(tǒng)下C++調(diào)用matlab程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

之前已經(jīng)跟大家介紹了在ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法,需要的朋友們可以參考這篇文章,本文將給大家介紹關(guān)于windows下C++調(diào)用matlab程序的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

實(shí)驗(yàn)平臺(tái):

   matlab R2016b   VS2013

思路:

     1. 設(shè)置matlab的編譯器,使用外部的VC或者gcc等編譯器。

     2. 編譯m文件成dll

     3. 設(shè)置VS的Include路徑和lib鏈接庫(kù)的路徑

     4. 編寫(xiě)C++調(diào)用dll

步驟:

1.    設(shè)置matlab的編譯器

在命令行窗口下,輸入并執(zhí)行如下命令:mex –setup

在出現(xiàn)的編譯器中,選擇VS2013

然后在輸入命令:mbuild –setup 同樣選擇VS2013

2.    編寫(xiě).m文件

如下函數(shù)時(shí)完成圖像的分割功能,第一個(gè)參數(shù)是圖像的文件名(路徑),第二個(gè)參數(shù)是分割圖像閾值的大小;完成分割后,將圖像保存為result.bmp;返回值則是原圖像的數(shù)據(jù);

function imagedata=improcess(filename,threshold); 
imagedata=double(imread(filename)); 
newbuf=imagedata; 
[M N]=size(imagedata); 
for i=1:1:M 
 for j=1:1:N 
  if imagedata(i,j)>threshold 
   newbuf(i,j)=255; 
  else 
   newbuf(i,j)=0; 
  end 
 end 
end 
imwrite(uint8(newbuf),'result.bmp'); 
return; 

3.    編譯.m文件

mcc -W cpplib:pr_lib -T link:lib improcess.m

解釋?zhuān)?/strong>其中-W是控制編譯之后的封裝格式;

cpplib,是指編譯成C++的lib;

cpplib冒號(hào)后面是指編譯的庫(kù)的名字;

-T表示目標(biāo),link:lib表示要連接到一個(gè)庫(kù)文件的目標(biāo),目標(biāo)的名字即是.m函數(shù)的名字。

編譯完成之后,pr_lib.h pr_lib.libpr_lib.dll這三個(gè)文件時(shí)我們?cè)赾++中調(diào)用所需要的;這三個(gè)文件和我們用c++編寫(xiě)dll時(shí),生成的三個(gè)文件時(shí)對(duì)應(yīng)的;

VS中的調(diào)用步驟

1.    設(shè)置VC環(huán)境

將matlab的頭文件路徑和對(duì)應(yīng)的庫(kù)文件路徑包含到VS;在VS中,點(diǎn)項(xiàng)目屬性然后在‘VC++目錄目錄'選項(xiàng)卡中,將包含目錄的最后一行,添加matlab相關(guān)的頭文件;如我的matlab對(duì)應(yīng)的路徑為:

........\MATLAB\R2016b\extern\include

........\MATLAB\R2016b\extern\include\win64

將庫(kù)目錄,將matlab相關(guān)的靜態(tài)鏈接庫(kù)的路徑加入其中:

........\MATLAB\R2016b\extern\lib\win32\microsoft

將鏈接器->輸入:

libeng.lib
libmat.lib
libmex.lib
mclmcrrt.lib
pr_lib.lib

2.    新建一個(gè)基于控制臺(tái)的hello World程序;

2.1    添加必須的頭文件和必須的靜態(tài)鏈接庫(kù)

如果在上面的鏈接庫(kù)中添加了lib, 下面只需要加入頭文件就可以了。

#pragma comment(lib,"mclmcrrt.lib") 
#pragma comment(lib,"libmx.lib") 
#pragma comment(lib,"libmat.lib") 
#include "matrix.h" 
#include "stdafx.h" 
#include <iostream> 
#include "pr_lib.h" 

2.2    將matlab編譯生成的pr_lib.h pr_lib.libpr_lib.dll文件拷貝到工程目錄下;并將頭問(wèn)價(jià)和靜態(tài)鏈接庫(kù)添加到工程中:

#pragma comment(lib,"pr_lib.lib")
#include "pr_lib.h"

2.3    編輯main函數(shù),調(diào)用improcess函數(shù);

int main(int argc, char* argv[]) 
{ 
 //初始化, 在C++調(diào)用matlab時(shí),必須要進(jìn)行初始化。 
 if( !pr_libInitialize()) 
 { 
  printf("Could not initialize !"); 
  return -1;  
 } 
 char f_name[10]="lenna.pgm"; 
//必須將lenna.pgm圖像,拷貝到工程目錄下 
 mwArray file_name(f_name);//'lenna.pgm' 
 mwArray m_threshold(1,1, mxDOUBLE_CLASS); 
 m_threshold(1,1)=128;//閾值為128 
 mwArray ImageData(512,512, mxDOUBLE_CLASS); 
 improcess(1,ImageData,file_name,m_threshold); 
//1,表示返回值的個(gè)數(shù),ImageData用于接收返回值 
 printf("\n圖像處理結(jié)束,已經(jīng)圖像以閾值128分割開(kāi)!\n"); 
 double *resultdata=new double[512*512]; 
 ImageData.GetData(resultdata,512*512); 
 printf("\n已獲得圖像數(shù)據(jù)...\n"); 
 for(int i=0;i<512;i++) 
 { 
  for(int j=0;j<512;j++) 
  { 
   printf("%0.1f ",resultdata[512*i+j]); 
  } 
  printf("\n"); 
 } 
 delete []resultdata; 
 // 后面是一些終止調(diào)用的程序 
 // terminate the lib  
 pr_libTerminate();   
 return 0; 
} 

解析:從上面的程序我們可以看出,c++與matlab函數(shù)數(shù)據(jù)傳遞是借助matlab定義的mwArray類(lèi)完成的!該類(lèi)支持的數(shù)據(jù)類(lèi)型有:

/*typedef enum
 {
 mxUNKNOWN_CLASS = 0,
 mxCELL_CLASS,
 mxSTRUCT_CLASS,
 mxLOGICAL_CLASS,
 mxCHAR_CLASS,
 mxVOID_CLASS,
 mxDOUBLE_CLASS,
 mxSINGLE_CLASS,
 mxINT8_CLASS,
 mxUINT8_CLASS,
 mxINT16_CLASS,
 mxUINT16_CLASS,
 mxINT32_CLASS,
 mxUINT32_CLASS,
 mxINT64_CLASS,
 mxUINT64_CLASS,
 mxFUNCTION_CLASS,
 mxOPAQUE_CLASS,
  mxOBJECT_CLASS}*/

同時(shí)我們應(yīng)注意:mwArray類(lèi)定義的對(duì)象數(shù)組,其坐標(biāo)仍然是從1開(kāi)始,而不是像c++那樣,從0開(kāi)始!mwArray的更詳細(xì)的用法,可以參看mclcomclass.h

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • QT網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例

    QT網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例

    下面小編就為大家?guī)?lái)一篇QT網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • C語(yǔ)言深入探究函數(shù)的溯源

    C語(yǔ)言深入探究函數(shù)的溯源

    函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè) C 程序都至少有一個(gè)函數(shù),即主函數(shù) main() ,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)
    2022-04-04
  • C語(yǔ)言實(shí)例講解嵌套語(yǔ)句的用法

    C語(yǔ)言實(shí)例講解嵌套語(yǔ)句的用法

    所謂嵌套(Nest),就是一條語(yǔ)句里面還有另一條語(yǔ)句,例如 for 里面還有 for,while 里 面還有 while,或者 for 里面有 while,while 里面有 if-else,這都是允許的
    2022-05-05
  • 深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    深入學(xué)習(xí)C++智能指針之shared_ptr與右值引用的方法

    智能指針的核心實(shí)現(xiàn)技術(shù)是引用計(jì)數(shù),每使用它一次,內(nèi)部引用計(jì)數(shù)加1,每析構(gòu)一次內(nèi)部的引用計(jì)數(shù)減1,減為0時(shí),刪除所指向的堆內(nèi)存,今天通過(guò)本文給大家分享C++智能指針之shared_ptr與右值引用的方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • C語(yǔ)言 while for do while循環(huán)體詳解用法

    C語(yǔ)言 while for do while循環(huán)體詳解用法

    在不少實(shí)際問(wèn)題中有許多具有規(guī)律性的重復(fù)操作,因此在程序中就需要重復(fù)執(zhí)行某些語(yǔ)句。一組被重復(fù)執(zhí)行的語(yǔ)句稱(chēng)之為循環(huán)體,能否繼續(xù)重復(fù),決定循環(huán)的終止條件
    2021-10-10
  • 一文搞懂C++中的四種強(qiáng)制類(lèi)型轉(zhuǎn)換

    一文搞懂C++中的四種強(qiáng)制類(lèi)型轉(zhuǎn)換

    很多朋友向小編了解C語(yǔ)言中怎么進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換呢?在這小編告訴大家強(qiáng)制類(lèi)型轉(zhuǎn)換可以分為兩種,一種是隱式類(lèi)型轉(zhuǎn)換一種是顯示類(lèi)型轉(zhuǎn)換,下面通過(guò)示例代碼給大家介紹下,需要的朋友參考下吧
    2021-07-07
  • c++ bitset詳解

    c++ bitset詳解

    這篇文章主要介紹了C++ bitset用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 解決Microsoft?Visual?C++?2010?Express?運(yùn)行及調(diào)試問(wèn)題

    解決Microsoft?Visual?C++?2010?Express?運(yùn)行及調(diào)試問(wèn)題

    這篇文章主要介紹了解決Microsoft?Visual?C++?2010?Express?運(yùn)行及調(diào)試問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • C/C++中數(shù)據(jù)類(lèi)型轉(zhuǎn)換詳解及其作用介紹

    C/C++中數(shù)據(jù)類(lèi)型轉(zhuǎn)換詳解及其作用介紹

    這篇文章主要介紹了C/C++中數(shù)據(jù)類(lèi)型轉(zhuǎn)換詳解及其作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 堆基本操作實(shí)現(xiàn)最大堆

    堆基本操作實(shí)現(xiàn)最大堆

    這篇文章主要介紹了堆基本操作實(shí)現(xiàn)最大堆,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

龙口市| 象州县| 黔江区| 新化县| 宁波市| 千阳县| 渭源县| 新津县| 甘南县| 新巴尔虎右旗| 理塘县| 淮安市| 桦南县| 阜新| 维西| 大宁县| 阜新| 普兰店市| 临沭县| 尼木县| 长垣县| 西昌市| 峨边| 黄山市| 茂名市| 鄂托克前旗| 河池市| 陵川县| 岑溪市| 双城市| 高要市| 松原市| 东丰县| 黄浦区| 固始县| 澎湖县| 青河县| 开阳县| 朝阳县| 剑阁县| 阿拉善左旗|