在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

      Matlab強(qiáng)大的數(shù)組處理功能如何解決圖像處理解析方

      作者: 時(shí)間:2012-05-31 來(lái)源:網(wǎng)絡(luò) 收藏

      基于COM組件的與C++混合編程方式因擁有獨(dú)立的運(yùn)行環(huán)境和兩種語(yǔ)言的互補(bǔ)優(yōu)勢(shì)而被眾多科研人員和編程人員所接受,同時(shí)也是MathWorks公司推薦使用的混編方式。但在程序設(shè)計(jì)過(guò)程中,通常會(huì)遇到兩個(gè)難點(diǎn)問(wèn)題:(1)二維參數(shù)的傳遞與輸出; (2)生成圖形嵌入VC工程界面中。對(duì)于第一個(gè)問(wèn)題,Bruce McKinney[1]在MSDN上指出;“如果對(duì)一維進(jìn)行操作,則SAFEARRAY函數(shù)變的簡(jiǎn)單且易操作。但是對(duì)于多維,同樣的操作要復(fù)雜得多”,造成這一問(wèn)題的根源在于與C++對(duì)多維數(shù)組元素的存儲(chǔ)方式不同。而在本項(xiàng)目開發(fā)過(guò)程中回避了這個(gè)復(fù)雜的過(guò)程,轉(zhuǎn)而利用Matlab強(qiáng)大的數(shù)組將其解決。Matlab完善的圖形是其被科研人員所推崇的原因之一,但因其圖形擁有獨(dú)立的窗口,嚴(yán)重影響了整體界面美觀和用戶交互體驗(yàn),所以Matlab圖形嵌入是混合編程中不可回避的問(wèn)題。對(duì)此將通過(guò)實(shí)例介紹兩種圖形嵌入方法并分析說(shuō)明其優(yōu)缺點(diǎn)和相關(guān)細(xì)節(jié)。

      本文引用地址:http://www.biyoush.com/article/190329.htm

      本文示例均在Matlab R2008a和VC 6.0平臺(tái)下完成,且通過(guò)調(diào)試能夠正常運(yùn)行。

      1 Excel文件讀取方法

      VC平臺(tái)下的Excel文件讀取方式復(fù)雜難懂,但如果使用Matlab與VC的混合編程方式編寫將更加簡(jiǎn)便,而且擁有較強(qiáng)的可擴(kuò)展性。下面代碼詳細(xì)講解了該過(guò)程。

      (1)在Matlab平臺(tái)下建立CExcelRead.m文件,代碼如下:

      function [output,row,col] = CExcelRead(filePath)

      //filePath包含了指定文件的路徑和文件名,由VC平臺(tái)函數(shù)GetPathName()獲取

      [typ, desc] = xlsfinfo(filePath);

      //xlsfinfo()可獲取指定Excel文件中各個(gè)sheet工作區(qū)的名稱,返回值存入名為desc的cell數(shù)組中

      sheet1 = cell2mat(desc(1));

      //默認(rèn)打開”sheet1”(名稱任意),并將其轉(zhuǎn)換為字符串

      output = xlsread(filePath,sheet1);

      //返回該Excel文件中的數(shù)據(jù),返回值存入output數(shù)組中

      [row,col] = size(output);

      //獲取錄入數(shù)據(jù)的行列值,返回到VC平臺(tái)以供其拷貝指定內(nèi)存大小的數(shù)據(jù)

      output = reshape(output,row*col,1);

      //將該二維數(shù)組轉(zhuǎn)換為一維。這是第二部分二維數(shù)組處理的第一步

      保存文件后,使用deploytool工具將其制作成名為FileOpen的COM(封裝MCR),注冊(cè)該控件并將相應(yīng)的文件拷貝到MFC的工程中,對(duì)于基礎(chǔ)操作此處不再贅述。

      (2)在VC平臺(tái)下創(chuàng)建名為PCA的基于對(duì)話框的MFC工程,添加一打開文件的按鈕控件,ID為ID_FILE_OPEN。篇幅所限只給出部分核心代碼,首先在Dlg類中添加3個(gè)私有成員變量用以保存Matlab讀取的數(shù)據(jù)及行列值,即:

      double *m_originData; long m_row, m_col;

      在響應(yīng)函數(shù)中添加如下代碼

      CFileDialog fileDlg(TRUE);

      fileDlg.m_ofn.lpstrTitle=請(qǐng)選擇你的excel數(shù)據(jù);

      fileDlg.m_ofn.lpstrFilter=Text Files(*.xls)*.xlsAll Files(*.*)*.*;

      if(IDOK==fileDlg.DoModal() {

      CString fileName; IFileOpenclass *pfile;

      VARIANT filePath,output,rowOutput,colOutput;

      //m文件的輸入?yún)?shù)

      fileName = fileDlg.GetPathName();

      //獲取文件路徑并存于fileName中

      CoInitialize(NULL); //COM初始化

      HRESULT hr = CoCreateInstance(CLSID_FileOpenclass,NULL,CLSCTX_ALL,IID_IFileOpenclass,(void**)pfile);

      //新建COM實(shí)例

      VariantInit(filePath); //VARIANT數(shù)據(jù)初始化

      filePath.vt = VT_BSTR; //指定filePath變量類型

      //將fileName中保存的指定文件路徑名保存至filePath參數(shù)中

      filePath.bstrVal = fileName.AllocSysString();

      pfile->CExcelRead(3,output,rowOutput, colOutput,filePath);

      m_row=(long) rowOutput.dblVal;

      //取出行列值及錄入數(shù)據(jù)

      m_col = (long) colOutput.dblVal;

      m_originData = (double *)malloc(sizeof(double)*m_row*m_

      col); memcpy(m_originData,output.parray->pvData,m_row*m_

      col*sizeof(double));

      //將matlab讀入數(shù)據(jù)保存到m_originData供后面程序使用

      }

      c++相關(guān)文章:c++教程



      上一頁(yè) 1 2 3 4 下一頁(yè)

      評(píng)論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉