腐蝕與膨脹只能適用(3 x 3)
可以修改成任意的形態腐蝕
原理:以後再補原理
代碼:
膨脹
//膨脹
void Morth_Dilet(QImage *image,QImage &out, int nTempH,int nTempW,int nTempMY,int nTempMX, int se[][3])
{
bool bMatch; //結構元素是否與局部圖像匹配
Init_Image(out,255);
int x,y;
int w = image->width() - (nTempH-nTempMY) +1;
int h = image->height() - (nTempW-nTempMX) +1;
for(int i = nTempMY; i<h ; i++)
{
for(int j = nTempMX; j < w; j++)
{
bMatch = true;
for(int k = 0; k < nTempH; k++)
{
for(int l = 0; l < nTempW; l++)
{
x = j + l - nTempMX;
y = i + k - nTempMY;
int grey = qGray(image->pixel(x, y));
if(se[l][k] == -1)
{
continue;
}
if(se[l][k] == 1)
{
if(grey != 0)
{
bMatch = false;
break;
}
}
else if(se[l][k] == 0)
{
if(grey != 255)
{
bMatch = false;
break;
}
}
else {
return ;
}
}
}
if(bMatch)
{
out.setPixel(j,i,qRgb(0, 0, 0));
}
}
}
}
腐蝕:
//腐蝕
void Morth_Erode(QImage &image,QImage &out, int nTempH,int nTempW,int nTempMY,int nTempMX, int se[][3])
{
QColor oldColor;
int w = image.width() - (nTempH-nTempMY) +1;
int h = image.height() - (nTempW-nTempMX) +1;
int x,y;
for(int i = nTempMY; i<h; i++)
{
for(int j = nTempMX; j < w; j++)
{
for(int k = 0; k < nTempH; k++)
{
for(int l = 0; l < nTempW; l++)
{
x = j + l -nTempMX;
y = i + k - nTempMY;
int grey = qGray(image.pixel(x,y));
if(se[l][k] == -1)
{
continue;
}
if(se[l][k] == 1)
{
if(grey == 0)
{
out.setPixel(j,i,qRgb(0, 0, 0));
break;
}
}
else {
return ;
}
}
}
}
}
}