win-tc中实现图像腐蚀与膨胀编程
发布网友
发布时间:2024-10-08 07:08
我来回答
共1个回答
热心网友
时间:2024-10-21 03:30
void Terode(LPBYTE lpIn,LPBYTE lpOut,int imgWidth,int imgHeight,int *mask)
//二值形态学腐蚀运算,背景为黑色,白色为目标
{
int i,j,k,l;
int lineByte=(imgWidth+3)/4*4;
int dis,dis0,judge;
for(i=0;i<imgHeight;i++)//全图copy
{
for(j=0;j<lineByte;j++)
{
*(lpOut+i*lineByte+j)=*(lpIn+i*lineByte+j);
}
}
for(i=2;i<imgHeight-2;i++)
{
for(j=2;j<imgWidth-2;j++)
{
judge=1;
for(k=-2;k<3;k++)
{
for(l=-2;l<3;l++)
{
if(mask[5*(2+k)+l+2])
{
dis=(i+k)*lineByte+j+l;
if(!*(lpIn+dis))
judge=0;//标志结构元素不匹配
}
}
}
dis0=i*lineByte+j;
if(judge)
*(lpOut+dis0)=255;
else
*(lpOut+dis0)=0;
}
}
}
void Texpand(LPBYTE lpIn,LPBYTE lpOut,int imgWidth,int imgHeight,int *mask)
//二值形态学膨胀,背景为黑色,白色为目标
{
int i,j,k,l;
int lineByte=(imgWidth+3)/4*4;
int dis,tmp;
for(i=0;i<imgHeight;i++)//全图copy
{
for(j=0;j<lineByte;j++)
{
*(lpOut+i*lineByte+j)=*(lpIn+i*lineByte+j);
}
}
for(i=2;i<imgHeight-2;i++)
{
for(j=2;j<imgWidth-2;j++)
{
tmp=*(lpIn+i*lineByte+j);
if(tmp)
{
for(k=-2;k<3;k++)
{
for(l=-2;l<3;l++)
{
if(mask[5*(2+k)+l+2])
{
dis=(i+k)*lineByte+j+l;
*(lpOut+dis)=255;
}
}
}
}
}
}
}