📄 onmorpherosionmatlab.txt
字号:
void CDipDoc::OnMorphErosionMATLAB()
{
//通过向MATALB空间发送变量实现混合编程
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空间传送图像数据
//图像指针为空,无法操作返回
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;
//获得颜色数
nNumColors=m_pDibObject->GetNumColors();
//获得调色板指针
pPalette=(RGBQUAD*)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof (BITMAPFILEHEADER)];
//获得位图数据指针
pBits=(unsigned char *)&pBuffer[sizeof(BITMAPFILEHEADER)+sizeof (BITMA-
PFILEHEADER)+nNumColos*sizeof(RGBQUAD)];
//图像数据区大小(字节总数)
DWORD SizeImage=nWidthBytes*nHeight;
// - - - - - - - - - - - - - - - - -
//创建图像数据矩阵
Data=mxCreateNumericMatrix(nHeight,nWidthBytes, mxUINT8_CLASS, mxREAL);
//用memcpy内存拷贝命令将图像数据赋予矩阵
memcpy((char*) (mxGetPr(Data)), (char*)pBits, SizeImage);
//传送到MATLAB空间
engPutVariable(ep,"Data", Data);
//再用rot90()函数将二维矩阵逆时针旋转90度,将矩阵变为nHeight*nWidthBytes
//的地维矩阵并使的矩阵的第nHeight行对应图像数据的第一行数据
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);
//关闭MATLAB引擎,退出MATLAB
engClose(ep);
//内存解锁
::GlobalUnlock(m_pDibObject->GetDib());
UpdataAllViews(NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -