记:MFC开发

1.初始化显示界面,之模态对话框与非模态对话框

模态对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。(比如:word中的“另存为”)
其打开跟关闭分别为:
//打开
CMyNewDialog Dlg;
Dlg.DoModal();

//关闭OnOK()
if(solvefourpic_3TInitialize()&&solvewumaiInitialize())    //MATLAB初始化用界面掩饰
{
	OnOK();		
}
else
{
	AfxMessageBox(_T("MATLAB DLL 初始化失败!!!"));
}
非模态对话框,它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等。(比如:word中的“查找与替换)
//打开
CMyNewDialog *dlg=new CMyNewDialog;
dlg->Create(IDD_DIALOG_Ini,this); //第一个参数是对话框ID号
dlg->ShowWindow(SW_SHOW); //第一种

//关闭
dlg->CloseWindow();
delete dlg;//如果要再次使用就要重新new,或者不加这句delete

2.状态栏实现方法如下:

static UINT indicators[]=
	{
		IDS_ABOUTBOX,//资源视图中的string ID
		IDS_STRING102,
	};


//在OnInitDialog中实现
CStatusBar m_StatusBar;
m_StatusBar.Create(this);
m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));
		
m_StatusBar.SetPaneInfo(0,IDS_ABOUTBOX,SBPS_STRETCH,100);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);


//需要显示时即可用该句实现
m_StatusBar.SetPaneText(0,_T("视频处理中..................."),true);

3.Matlab与VS混编时图片处理,分通道单独传输实现交互过程。

此处为分通道获取///
mwArray mimage_45_R(image_45.rows,image_45.cols,mxUINT8_CLASS,mxREAL);
mwArray mimage_45_G(image_45.rows,image_45.cols,mxUINT8_CLASS,mxREAL);
mwArray mimage_45_B(image_45.rows,image_45.cols,mxUINT8_CLASS,mxREAL);
//C++输入转matlab  接口矩阵转化及像素归一化
for(int j = 0; j < image_45.rows; ++j){
	for(int i = 0; i <image_45.cols; ++i){
		Vec3b& mp = image_45.at<Vec3b>(j, i);        //C++用向量存储像素值
		//double B = mp.val[0]*1.0/255;                //像素归一化到0-1之间
		double B = mp.val[0];
		double G = mp.val[1];
		double R = mp.val[2];
		mimage_45_R(j+1,i+1)=(int)R;     //matlab中用三个面R,G,B存储像素值
		mimage_45_G(j+1,i+1)=(int)G;            //C++图像矩阵像素值赋给matlab矩阵
		mimage_45_B(j+1,i+1)=(int)B;
	}     
}

		mwArray mimage_90_R(image_90.rows,image_90.cols,mxUINT8_CLASS,mxREAL);
		mwArray mimage_90_G(image_90.rows,image_90.cols,mxUINT8_CLASS,mxREAL);
		mwArray mimage_90_B(image_90.rows,image_90.cols,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化
		for(int j = 0; j < image_90.rows; ++j){
			for(int i = 0; i <image_90.cols; ++i){
					Vec3b& mp = image_90.at<Vec3b>(j, i);        //C++用向量存储像素值
					//double B = mp.val[0]*1.0/255;                //像素归一化到0-1之间
					double B = mp.val[0];
					double G = mp.val[1];
					double R = mp.val[2];
					mimage_90_R(j+1,i+1)=(int)R;     //matlab中用三个面R,G,B存储像素值
					mimage_90_G(j+1,i+1)=(int)G;    //C++图像矩阵像素值赋给matlab矩阵
					mimage_90_B(j+1,i+1)=(int)B;
			}     
		}


		mwArray mimage_135_R(image_135.rows,image_135.cols,mxUINT8_CLASS,mxREAL);
		mwArray mimage_135_G(image_135.rows,image_135.cols,mxUINT8_CLASS,mxREAL);
		mwArray mimage_135_B(image_135.rows,image_135.cols,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化
		for(int j = 0; j < image_135.rows; ++j){
			for(int i = 0; i <image_135.cols; ++i){
					Vec3b& mp = image_135.at<Vec3b>(j, i);        //C++用向量存储像素值
					//double B = mp.val[0]*1.0/255;         //像素归一化到0-1之间
					double B = mp.val[0];
					double G = mp.val[1];
					double R = mp.val[2];
					mimage_135_R(j+1,i+1)=(int)R;   //matlab中用三个面R,G,B存储像素值
					mimage_135_G(j+1,i+1)=(int)G;  //C++图像矩阵像素值赋给matlab矩阵
					mimage_135_B(j+1,i+1)=(int)B;
			}     
		}
solvefourpic_3T(1,moutput_img,mimage_45_R,mimage_45_G,mimage_45_B,mimage_90_R,mimage_90_G,mimage_90_B,mimage_135_R,mimage_135_G,mimage_135_B);

4.Matlab与VS混编时图片处理,分通道总传输实现交互过程。

mwSize  mdim_In[3] ={image_45.rows,image_45.cols,3};
		mwArray mimage_45(3,mdim_In,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化
		for(int j = 0; j < image_45.rows; ++j){
			for(int i = 0; i <image_45.cols; ++i){
					Vec3b& mp = image_45.at<Vec3b>(j, i);        //C++用向量存储像素值
					//double B = mp.val[0]*1.0/255;        //像素归一化到0-1之间
					double B = mp.val[0];
					double G = mp.val[1];
					double R = mp.val[2];
					mimage_45(j+1,i+1,1)=(int)R;     //matlab中用三个面R,G,B存储像素值
					mimage_45(j+1,i+1,2)=(int)G;   //C++图像矩阵像素值赋给matlab矩阵
					mimage_45(j+1,i+1,3)=(int)B;
			}     
		}

		mwArray mimage_90(3,mdim_In,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化
		for(int j = 0; j < image_90.rows; ++j){
			for(int i = 0; i <image_90.cols; ++i){
					Vec3b& mp = image_90.at<Vec3b>(j, i);        //C++用向量存储像素值
					//double B = mp.val[0]*1.0/255;     //像素归一化到0-1之间
					double B = mp.val[0];
					double G = mp.val[1];
					double R = mp.val[2];
					mimage_90(j+1,i+1,1)=(int)R;   //matlab中用三个面R,G,B存储像素值
					mimage_90(j+1,i+1,2)=(int)G;   //C++图像矩阵像素值赋给matlab矩阵
					mimage_90(j+1,i+1,3)=(int)B;
			}     
		}


		mwArray mimage_135(3,mdim_In,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化
		for(int j = 0; j < image_135.rows; ++j){
			for(int i = 0; i <image_135.cols; ++i){
					Vec3b& mp = image_135.at<Vec3b>(j, i);        //C++用向量存储像素值
					//double B = mp.val[0]*1.0/255;        //像素归一化到0-1之间
					double B = mp.val[0];
					double G = mp.val[1];
					double R = mp.val[2];
					mimage_135(j+1,i+1,1)=(int)R;     //matlab中用三个面R,G,B存储像素值
					mimage_135(j+1,i+1,2)=(int)G;    //C++图像矩阵像素值赋给matlab矩阵
					mimage_135(j+1,i+1,3)=(int)B;
			}     
		}

		//调用DLL
		mwSize  mdim_out[3] ={image_45.rows,image_45.cols,3};
		mwArray moutput_img(3,mdim_out,mxUINT8_CLASS,mxREAL);


		try
		{
			solvefourpic_3T(1,moutput_img,mimage_45,mimage_90,mimage_135);
		  
		}
		catch(mwException e)
		{
			AfxMessageBox(e.what());
			return image_45;
		}

5.Matlab与VS混编时,不分通道虽然传输效率最快,但同时测试数据存在局部问题,尚需解决。

Mat image_45 = imread(Path+"\\000.jpg",1);
Mat image_90 = imread(Path+"\\045.jpg",1);
Mat image_135 = imread(Path+"\\090.jpg",1);

		//调用matlab程序进行图像增强
		//2545 2083
		mwSize  mdim_45[3] ={image_45.rows,image_45.cols,3};
		mwSize  mdim_90[3] ={image_90.rows+1,image_90.cols+1,3};
		mwSize  mdim_135[3] ={image_135.rows+1,image_135.cols+1,3};
		mwSize  mdim_max[3] ={2545,2083,3};
		mwArray mimage_45(3,mdim_45,mxUINT8_CLASS,mxREAL);
		mwArray mimage_90(3,mdim_45,mxUINT8_CLASS,mxREAL);
		mwArray mimage_135(3,mdim_45,mxUINT8_CLASS,mxREAL);
		//C++输入转matlab  接口矩阵转化及像素归一化

	
		mimage_45.SetData(image_45.data,image_45.rows*image_45.cols*3);
		mimage_90.SetData(image_90.data,image_90.rows*image_90.cols*3);
		mimage_135.SetData(image_135.data,image_135.rows*image_135.cols*3);


		mwArray moutput_img(3,mdim_45,mxUINT8_CLASS,mxREAL);
		mwSize  mdim_out[3] ={image_45.rows,image_45.cols,1};
		mwArray moutput_img(3,mdim_out,mxUINT8_CLASS,mxREAL);
		//调用DLL
		solvefourpic(1,moutput_img,mimage_45,mimage_90,mimage_135);
		solvemaxmin(mimage_Imax,mimage_Imin);

//matlab结果转C++
Mat Image_out(image_45.size(), image_45.type());//为了节省栈的空间用image_Imin代替输出
moutput_img.GetData(Image_out.data,Image_out.rows*Image_out.cols*3);

		for(int j=0;j<Image_out.rows;++j){
			for(int i=0;i<Image_out.cols;++i){
				//uint8_t R=moutput_img.Get(3,j+1,i+1,3);
				uint8_t G=moutput_img.Get(3,j+1,i+1,2);
				//uint8_t B=moutput_img.Get(3,j+1,i+1,1);

				//Image_out.at<Vec3b>(j,i)[0]=R;
				Image_out.at<Vec3b>(j,i)[1]=G;
				//Image_out.at<Vec3b>(j,i)[2]=B;

			}
		}

6.MFC线程

//在头文件定义
CWinThread* MyThread;

//在需要实现的地方实现
MyThread = AfxBeginThread(MyfirstThread,this);

UINT MyfirstThread(LPVOID pParam)
	{
		CProject_twoDlg* dlg = (CProject_twoDlg*)pParam;//线程的参数pParam就是实现时的类指针
		while (TRUE)
		{
			AfxMessageBox("ok");
			Sleep(1000);
		}
return 0; //Work线程是一个全局函数,或者是一个Static函数,所以它的运行完成也就是它的正常退出
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值