?? onmorpherosionmatlab.txt
字號:
void CDipDoc::OnMorphErosionMATLAB()
{
//通過向MATALB空間發(fā)送變量實現(xiàn)混合編程
Engine *ep; //定義MATLAB引擎變量
mxArray *T=NULL;
mxArray *Data=NULL;
mxArray *Result=NULL;
if(!(ep=engOpen("\0"))) //打開MATLAB引擎
{
fprintf(stderr,"\n MATLAB引擎啟動失敗!\n");
MessageBox(NULL,"MATLAB引擎啟動失敗!","MATLAB",MB_OK| MB_
ICO NERROR);
exit(-1);
}
//向MATLAB空間傳送圖像文件名
CString strPathName=GetPathName();
T=mxCreateString(strPathName);
engPutVariable(ep,"T",T);
// - - - - - - - - - - - - - - - -
//向MATLAB空間傳送圖像數(shù)據(jù)
//圖像指針為空,無法操作返回
if(m_pDibObject==NULL)
return;
//對不是8位的圖像不作任何操作直接返回
if(m_pDibObject->GetNumBit()!=8)
{
AfxMessageBox("目前只支持8位圖像的處理");
return;
}
//獲取圖像寬度和高度(以像素為單位)
int nWidth=m_pDibObject->GetWidth();
int nHeight=m_pDibObject->GetHeight();
//定義變量
unsigned char *pBuffer;
unsigned char *pBits;
RGBQUAD *pPalette;
int nWidthByte, nNumColors;
//獲取圖像指針
pBuffer=(unsigned char *)m_pDibObject->GetDIBPointer
(&nWidthBytes, m_pDibObject->GetNumBits());
if(pBuffer==NULL)
return;
//獲得顏色數(shù)
nNumColors=m_pDibObject->GetNumColors();
//獲得調(diào)色板指針
pPalette=(RGBQUAD*)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof (BITMAPFILEHEADER)];
//獲得位圖數(shù)據(jù)指針
pBits=(unsigned char *)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof (BITMA-
PFILEHEADER)+nNumColos*sizeof(RGBQUAD)];
//圖像數(shù)據(jù)區(qū)大小(字節(jié)總數(shù))
DWORD SizeImage=nWidthBytes*nHeight;
// - - - - - - - - - - - - - - - - -
//創(chuàng)建圖像數(shù)據(jù)矩陣
Data=mxCreateNumericMatrix(nHeight,nWidthBytes, mxUINT8_CLASS, mxREAL);
//用memcpy內(nèi)存拷貝命令將圖像數(shù)據(jù)賦予矩陣
memcpy((char*) (mxGetPr(Data)), (char*)pBits, SizeImage);
//傳送到MATLAB空間
engPutVariable(ep,"Data", Data);
//再用rot90()函數(shù)將二維矩陣逆時針旋轉(zhuǎn)90度,將矩陣變?yōu)閚Height*nWidthBytes
//的地維矩陣并使的矩陣的第nHeight行對應(yīng)圖像數(shù)據(jù)的第一行數(shù)據(jù)
engEvalString(ep,"Data=rot90(Data)");
engEvalString(ep,"SE=strel('square',[3 3])");
engEvalString(ep,"Result=imerode(Data, SE)");
engEvalString(ep,"Result=rot90(Result,-1)");
Result=engGetVariable(ep,"Result");
memcpy((char *) pBits, (char *) (mxGetPr(Result)), SizeImage);
//關(guān)閉MATLAB引擎,退出MATLAB
engClose(ep);
//內(nèi)存解鎖
::GlobalUnlock(m_pDibObject->GetDib());
UpdataAllViews(NULL);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -