⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onmorpherosionmatlab.txt

📁 这是机械工业张德丰《MATLAB与外部程序接口编程》随书源码
💻 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 + -