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

📄 dynsplitview2.cpp

📁 < VC++图像处理程程序设计>>配套光盘,这是第4章的灰度变换的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}

//图像灰度分布均衡化消息映射
void CDynSplitView2::OnFenbujunhenghua() 
{
	clearmem();
	int i;
	state3=0;
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2; 
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
    if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDibNew1->Fenbujunhenghua();             //调用分布均衡化处理函数
		Invalidate();           //调用刷新函数
	}
	else		//24位彩色
	{
		clearmem2();
		CDibNew1->Fenbujunhenghua();             //调用分布均衡化处理函数
		Invalidate();           //调用刷新函数
	}
}

//匹配变换消息映射
void CDynSplitView2::OnPipeibianhuan() 
{
	
	clearmem();
	int n;
	state3=0;
	
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (n = 0; n <256; n++)
		dlg2->m_fIntensity[n] = midu2[n];
	
	//--------直方图设置 开始------------------------------------------
	int nu[64];
	float pu[64];
	
	float a=1.0f/(32.0f*63.0f);
	for(int i=0;i<64;i++)
	{
		nu[i]=i*4;
		pu[i]=a*i;
	}
	//--------直方图设置 结束------------------------------------------
	if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDibNew1->Pipeibianhuan(64,nu, pu);             //调用匹配变化处理函数
		Invalidate();           //调用刷新函数
	}
	else		//24位彩色
	{
		clearmem2();
		CDibNew1->Pipeibianhuan(64,nu, pu);             //调用匹配变化处理函数
		Invalidate();           //调用刷新函数
	}
}
 
//原图直方图显示
void CDynSplitView2::OnYuantuzhifangtu()  
{
	int i;
	clearmem();
	// 各颜色分量的灰度分布密度
	float midu[256];
	
	// 计算灰度分布密度 	 
	CDibNew1->ZhiFangTu(midu);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg3;
	dlg3=new CDlgZhiFangTu(this);
	dlg3->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg3->m_fIntensity[i] = midu[i];
	
	// 显示对话框,由用户进行灰度折线变换
	dlg3->ShowWindow(SW_RESTORE);
}

//水平投影消息映射
void CDynSplitView2::OnShuipingtouying()
{
	clearmem();
	int i;
	state3=0;
	
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
    if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDibNew1->Shuipingtouying();             //调用水平投影处理函数
		Invalidate();
	}
	else		//24位彩色
	{
		clearmem2();
		CDibNew1->Shuipingtouying();             //调用水平投影处理函数
		Invalidate();
	}
}


//垂直投影消息映射
void CDynSplitView2::OnChuizhitouying()  
{
	clearmem();
	int i;
	state3=0;
	
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;	 
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
    if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDibNew1->Chuizhitouying();             //调用垂直投影处理函数
		Invalidate();
	}
	else		//24位彩色
	{
		clearmem2();
		CDibNew1->Chuizhitouying();             //调用垂直投影处理函数
		Invalidate();
	}
}
 
//非零取一法灰度变换消息映射
void CDynSplitView2::OnFei0() 
{
	clearmem();
	int i;
	state3=0;
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;	 
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
    if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDibNew1->Fei0();             //调用非零取一处理函数
		Invalidate();
	}
	else		//24位彩色
	{
		clearmem2();
		CDibNew1->Fei0();             //调用非零取一处理函数
		Invalidate();
	}
}

//固定阀值灰度变换消息映射
void CDynSplitView2::OnGuding() 
{
	clearmem();
	int i;
	state3=0;
	
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
	if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDlgGuDingFaZhi dlg;
		if(IDOK==dlg.DoModal())
		{
			CDibNew1->GuDing(dlg.m_Yuzhi);
			Invalidate();
		}
	}
	else		//24位彩色
	{
		clearmem2();
		CDlgGuDingFaZhi dlg;
		if(IDOK==dlg.DoModal())
		{
			CDibNew1->GuDing(dlg.m_Yuzhi);
			Invalidate();
		}
	}
}

void CDynSplitView2::OnShuanGuDingFa() 
{
	clearmem();
	int i;
	state3=0;
	
	// 计算灰度分布密度
	CDibNew1->ZhiFangTu(midu2);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg2;
    dlg2=new CDlgZhiFangTu(this);
    dlg2->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg2->m_fIntensity[i] = midu2[i];
	if(CDibNew1->m_pBitmapInfoHeader->biBitCount<9)		//灰度图像
	{
		clearmem();
		CDialogShuangYu dlg;
		if(IDOK==dlg.DoModal())
		{
			CDibNew1->ShuangYu(dlg.m_ZhiYu1,dlg.m_ZhiYu2,dlg.m_mode);
			Invalidate();
		}
	}
	else		//24位彩色
	{
		clearmem2();
		CDialogShuangYu dlg;
		if(IDOK==dlg.DoModal())
		{
			CDibNew1->ShuangYu(dlg.m_ZhiYu1,dlg.m_ZhiYu2,dlg.m_mode);
			Invalidate();
		}
	}
}

void CDynSplitView2::clearmem2()
{
    CDSplitDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc ->statedoc=0;
    state2=1;
	CDibNew1=&pDoc->CDibNew;
    CDib1=&pDoc->CDib;
    long int  size=CDib1->GetHeight()*CDib1->GetDibWidthBytes();
    memcpy(CDibNew1->m_pData,CDib1->m_pData,size);
}

void CDynSplitView2::OnRedZhiFangtu() 
{
	int i;
	clearmem();
	// 各颜色分量的灰度分布密度
	float midu[256];
	
	// 计算灰度分布密度 	 
	CDibNew1->RedZhiFangTu(midu);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg3;
	dlg3=new CDlgZhiFangTu(this);
	dlg3->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg3->m_fIntensity[i] = midu[i];
	
	// 显示对话框,由用户进行灰度折线变换
	dlg3->ShowWindow(SW_RESTORE);
}

void CDynSplitView2::OnBlueZhiFangtu() 
{
	int i;
	clearmem();
	// 各颜色分量的灰度分布密度
	float midu[256];
	
	// 计算灰度分布密度 	 
	CDibNew1->BlueZhiFangTu(midu);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg3;
	dlg3=new CDlgZhiFangTu(this);
	dlg3->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg3->m_fIntensity[i] = midu[i];
	
	// 显示对话框,由用户进行灰度折线变换
	dlg3->ShowWindow(SW_RESTORE);
}

void CDynSplitView2::OnGreenZhifangtu() 
{
	int i;
	clearmem();
	// 各颜色分量的灰度分布密度
	float midu[256];
	
	// 计算灰度分布密度 	 
	CDibNew1->GreenZhiFangTu(midu);             //调用灰度统计处理函数
	
	// 创建对话框
	CDlgZhiFangTu*  dlg3;
	dlg3=new CDlgZhiFangTu(this);
	dlg3->Create(IDD_DLG_zhifangtufenbu);
	
	// 传递灰度分布密度数据给面板类
	for (i = 0; i <256; i++)
		dlg3->m_fIntensity[i] = midu[i];
	
	// 显示对话框,由用户进行灰度折线变换
	dlg3->ShowWindow(SW_RESTORE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -