1、平滑濾波(均值濾波)
void CTextView::OnSmooth()
{
//功能:實(shí)現(xiàn)均值濾波處理
//判斷圖像是否打開,沒打開,則彈出提示框并退出函數(shù)
if(!m_dib.m_bLoaded)
{
AfxMessageBox("圖像還打開,請先打開圖像!");
return;
}
//獲取圖像寬和高
int nw=m_dib.GetDIBWidth();
int nh=m_dib.GetDIBHeight();
int i,j,m,n;
BYTE* ptmp=new BYTE[nw*nh]; // 開辟一個(gè)與m_dib.m_pdata指向同樣大小的緩沖區(qū),可以進(jìn)一步了解BYTE是什么數(shù)據(jù)類型
memcpy(ptmp,m_dib.m_pdata,nw*nh);//將m_dib.m_pdata指向的nw*nh個(gè)字節(jié)內(nèi)容復(fù)制給ptmp指向的緩沖區(qū)
int mask[9]={1,1,1, 1,1,1, 1,1,1}; // 建立算子模板
int w_mask=3; //定義模板的大小
//對(duì)每一個(gè)象素進(jìn)行模板運(yùn)算處理
for(j=w_mask/2;j<nh-w_mask/2;j++) //注意,行和列的起始和結(jié)束位置,思考為什么會(huì)要這樣?
for(i=w_mask/2;i<nw-w_mask/2;i++)
{
//對(duì)圖像的第j行、第i列的像素
int result=0;
for(m=-w_mask/2;m<=w_mask/2;m++)
for(n=-w_mask/2;n<=w_mask/2;n++)
result+=ptmp[(j+m)*nw+i+n]*mask[(m+w_mask/2)*w_mask+n+w_mask/2];
result=(result)/9; //因?yàn)檫\(yùn)算后有點(diǎn)值小于零
if(result>255)
result=255;
m_dib.m_pdata[j*nw+i]=result;
}
//將修改的m_pdata的數(shù)據(jù)賦值給m_pDIBData,以顯示修改的結(jié)果
m_dib.UpdateData();
//刷新屏幕
Invalidate();
delete ptmp;
}
2、銳化(拉普拉斯算子)
void CTextView::OnMask()
{
//功能:實(shí)現(xiàn)銳化處理
//判斷圖像是否打開,沒打開,則彈出提示框并退出函數(shù)
if(!m_dib.m_bLoaded)
{
AfxMessageBox("圖像還打開,請先打開圖像!");
return;
//獲取圖像寬和高
int nw=m_dib.GetDIBWidth();
int nh=m_dib.GetDIBHeight();
int i,j,m,n;
BYTE* ptmp=new BYTE[nw*nh]; // 開辟一個(gè)與m_dib.m_pdata指向同樣大小的緩沖區(qū),可以進(jìn)一步了解BYTE是什么數(shù)據(jù)類型
memcpy(ptmp,m_dib.m_pdata,nw*nh);//將m_dib.m_pdata指向的nw*nh個(gè)字節(jié)內(nèi)容復(fù)制給ptmp指向的緩沖區(qū)
int mask[9]={0,1,0, 1,-4,1, 0,1,0}; // 建立算子模板 Laplace 3*3
int w_mask=3; //定義模板的大小
for(j=w_mask/2;j<nh-w_mask/2;j++)
for(i=w_mask/2;i<nw-w_mask/2;i++)
{
//對(duì)圖像的第j行、第i列的像素
int result=0;
for(m=-w_mask/2;m<=w_mask/2;m++) {
for(n=-w_mask/2;n<=w_mask/2;n++)
{result+=ptmp[(j+m)*nw+i+n]*mask[(m+w_mask/2)*w_mask+n+w_mask/2];}
}
result=abs(result+ptmp[(j+m)*nw+i+n]); //因?yàn)檫\(yùn)算后有點(diǎn)值小于零
if(result>255)
result=255;
m_dib.m_pdata[j*nw+i]=result;
}
//將修改的m_pdata的數(shù)據(jù)賦值給m_pDIBData,以顯示修改的結(jié)果
m_dib.UpdateData();
//刷新屏幕
Invalidate();
delete ptmp;}
Powered by 單片機(jī)教程網(wǎng)