📄 imagecodesdoc.cpp
字号:
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessAve(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessDataout(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessHor(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessHv(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessLap(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessMid(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessRecover(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessRobert(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessRui(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessSobel(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessVer(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateFileSaveAs(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
unsigned int CImageCodesDoc::SortAndSelectM(unsigned int s[3][3])
{
unsigned int i,j,count,temp,t[9];
for(i=0,count=0;i<3;i++)
for(j=0;j<3;j++)
t[count]=s[i][j],count++;
for(count=0;count<8;count++)//冒泡法排序
for(i=0;i<9-count;i++)
if(t[i]>t[i+1])temp=t[i],t[i]=t[i+1],t[i+1]=temp;
return t[5];//返回中间值
}
void CImageCodesDoc::OnProcessConvert()
{
// TODO: Add your command handler code here
label=false;
unsigned int i,j;
if(Grayflag==false) Gray();
if(convoflag==false) CopyGVToConvo();
for(i=0;i<r0;i++)
for(j=0;j<c0;j++)
{
convo[i][j]=255-GrayValue[i][j];//反色显示
}
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
convoflag=true;
}
void CImageCodesDoc::OnProcessGray1()
{
// TODO: Add your command handler code here
label=TRUE;//表示正在进行当前图处理
Gray();
CopyGVToConvo();//保证当前图处理中每一次灰度化,就重新开始一系列处理
ConvertTo24Bits(GrayValue);
//转化为一维数组后,就可以调用dispay直接输出了
TransBack(GrayValue);
Display();
ConvertTo8Bits(GrayValue);
}
void CImageCodesDoc::OnProcessAve1()
{
// TODO: Add your command handler code here
label=true;//表示正在进行当前图处理
double T[3][3]={0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.11,0.11};
EdgeDetect(T);
}
void CImageCodesDoc::OnProcessConvert1()
{
// TODO: Add your command handler code here
label=true;
unsigned int i,j;
if(convoflag==false)
CopyGrayValueToConvo();
for(i=0;i<r0;i++)
for(j=0;j<c0;j++)
{
convo[i][j]=255-convo[i][j];
}
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
}
void CImageCodesDoc::OnProcessErzhihua1()
{
// TODO: Add your command handler code here
label=true;
erflag=TRUE;
unsigned int r,c;
if(convoflag==false) CopyGrayValueToConvo();
for(r=0;r<r0;r++)
for(c=0;c<c0;c++)
{
if(convo[r][c]>70) GrayValue[r][c]=255;//当前图处理中的二值化阈值在程序中指定70
else GrayValue[r][c]=0;
}
CopyGVToConvo();
Grayflag=false;
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
convoflag=true;
}
void CImageCodesDoc::OnProcessHor1()
{
// TODO: Add your command handler code here
label=true;
double T[3][3]={0,-1,0,0,1,0,0,0,0};
EdgeDetect(T);
}
void CImageCodesDoc::OnProcessHv1()
{
// TODO: Add your command handler code here
label=true;
double T[3][3]={-1,0,0,0,1,0,0,0,0};
EdgeDetect(T);
}
void CImageCodesDoc::OnProcessLap1()
{
// TODO: Add your command handler code here
label=true;
double T[3][3]={0,1,0,1,-4,1,0,1,0};
EdgeDetect(T);
}
void CImageCodesDoc::OnProcessMid1()
{
// TODO: Add your command handler code here
label=true;
//当前图处理都是对上一步得到的convo值进行
if(convoflag==false) CopyGrayValueToConvo();//判断convo中是否有值,若无,就把灰度值拷过来
::SetCursor(mHWait);
unsigned int r,c,sort[3][3];
unsigned int i,j;
for(c=0;c<c0;c++)
{
GrayValue[0][c]=convo[0][c];
GrayValue[r0-1][c]=convo[r0-1][c];
}
for(r=1;r<r0-1;r++)
{
GrayValue[r][0]=convo[r][0];
GrayValue[r][c0-1]=convo[r][c0-1];
}
for(r=0;r<r0-2;r++)
for(c=0;c<c0-2;c++)
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)
sort[i][j]=convo[r+i][c+j];
GrayValue[r+1][c+1]=SortAndSelectM(sort);//GrayValue用作临时数组
}
CopyGVToConvo();//把临时数组中的值拷到convo中以供显示
Grayflag=false;//表示灰度矩阵的值已经不再是原始图像的灰度值
ConvertTo24Bits(convo);//显示convo
TransBack(convo);
Display();
ConvertTo8Bits(convo);
::SetCursor(mHArrow);
}
void CImageCodesDoc::OnProcessRobert1()
{
// TODO: Add your command handler code here
label=true;
if(convoflag==false) CopyGrayValueToConvo();
unsigned int GrayColorx,GrayColory,GrayColor;
unsigned int i,j,r,c;
::SetCursor(mHWait);
for(c=0;c<c0;c++)
{
GrayValue[0][c]=255;
GrayValue[r0-1][c]=255;
}
for(r=1;r<r0-1;r++)
{
GrayValue[r][0]=255;
GrayValue[r][c0-1]=255;
}
for(i=1;i<r0-1;i++)
{for(j=1;j<c0-1;j++)
{GrayColorx=convo[i][j]-convo[i-1][j-1];
GrayColory=convo[i-1][j]-convo[i][j-1];
GrayColor=abs(GrayColorx)+abs(GrayColory);
if(GrayColor>255) GrayColor=255;
GrayValue[i][j]=GrayColor;
}
}
CopyGVToConvo();
Grayflag=false;
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
::SetCursor(mHArrow);
}
void CImageCodesDoc::OnProcessRui1()
{
// TODO: Add your command handler code here
label=true;
double T[3][3]={0,-1,0,-1,5,-1,0,-1,0};
EdgeDetect(T);
}
void CImageCodesDoc::OnProcessSobel1()
{
// TODO: Add your command handler code here
label=true;
if(convoflag==false)
CopyGrayValueToConvo();
unsigned int i,j,r,c;
unsigned int GrayColorx,GrayColory;
::SetCursor(mHWait);
for(c=0;c<c0;c++)
{
GrayValue[0][c]=255;
GrayValue[r0-1][c]=255;
}
for(r=1;r<r0-1;r++)
{
GrayValue[r][0]=255;
GrayValue[r][c0-1]=255;
}
for(i=1;i<r0-1;i++)
for(j=1;j<c0-1;j++)
{
GrayColorx=(convo[i-1][j+1]+2*convo[i][j+1]+convo[i+1][j+1])
-(convo[i-1][j-1]+2*convo[i][j-1]+convo[i+1][j-1]);
GrayColory=(convo[i-1][j-1]+2*convo[i-1][j]+convo[i-1][j+1])
-(convo[i+1][j-1]+2*convo[i+1][j]+convo[i+1][j+1]);
GrayValue[i][j]=abs(GrayColorx)+abs(GrayColory);
if(GrayValue[i][j]>255) GrayValue[i][j]=255;
}
CopyGVToConvo();
Grayflag=false;
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
::SetCursor(mHArrow);
}
void CImageCodesDoc::OnProcessVer1()
{
// TODO: Add your command handler code here
label=true;
double T[3][3]={0,0,0,-1,1,0,0,0,0};
EdgeDetect(T);
}
void CImageCodesDoc::CopyGrayValueToConvo()
{
if(Grayflag==false) Gray();//先判断GrayValue中是否有值
CopyGVToConvo();
}
void CImageCodesDoc::CopyGVToConvo()
{
unsigned int i,j;
for(i=0;i<r0;i++)
for(j=0;j<c0;j++)
convo[i][j]=GrayValue[i][j];//拷贝
convoflag=true;
}
void CImageCodesDoc::OnUpdateFileSave(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessAve1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessConvert1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessErzhihua1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessGray1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessHor1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessHv1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessLap1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessMid1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessRobert1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessRui1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessSobel1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessVer1(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnUpdateProcessConvert(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(trans!=NULL);
}
void CImageCodesDoc::OnPointEnhance()
{
// TODO: Add your command handler code here
label=false;
if(Grayflag==false) Gray();//判断GrayValue中是否为原始图像的灰度值
unsigned int r,c;
for(r=0;r<r0;r++)
for(c=0;c<c0;c++)
{
convo[r][c]=GrayValue[r][c]+20;//亮度增强20
if(convo[r][c]>255) convo[r][c]=255;
}
ConvertTo24Bits(convo);
TransBack(convo);
Display();
convoflag=TRUE;
}
void CImageCodesDoc::OnPointEnhance1()
{
// TODO: Add your command handler code here
label=TRUE;//标志进行当前图处理
if(convoflag==false) CopyGrayValueToConvo();
unsigned int r,c;
for(r=0;r<r0;r++)
for(c=0;c<c0;c++)
{
convo[r][c]=convo[r][c]+20;
if(convo[r][c]>255) convo[r][c]=255;
}
ConvertTo24Bits(convo);
TransBack(convo);
Display();
ConvertTo8Bits(convo);
}
void CImageCodesDoc::OnPinghuaK() //k个邻点平均平滑
{
// TODO: Add your command handler code here
label=false;
if(Grayflag==false) Gray() ;
::SetCursor(mHWait);
unsigned int r,c,sort[3][3];//sort中存放中心像素及周围的8个像素
unsigned int i,j;
for(c=0;c<c0;c++)
{
convo[0][c]=GrayValue[0][c];
convo[r0-1][c]=GrayValue[r0-1][c];
}
for(r=1;r<r0-1;r++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -