1.腐蚀
我所采用的腐蚀是8邻域内的,对运动目标人有一定的保护作用,尽量减少对有效运动目标的腐蚀。
void InfoErode(unsigned char* pImgData, unsigned char* pDstData)
{
int i,j,nSum,nMean,nColum,nInter;
unsigned char *pDst1,*pDst2,*pDst3,*pDst4,*pDst5,*pDst6,*pDst7,*pDst8,*pDst9,*pDstResult,k;
pDstResult = pDstData;
memset(pDstData, 0 ,sizeof(unsigned char) * m_nMulti);
Dst1 = pImgData;
pDst2 = pDst1 + 1;
pDst3 = pDst2 + 1;
pDst4 = pDst1 + m_nWidth;
pDst5 = pDst4 + 2;
pDst6 = pDst4 + m_nWidth;
pDst7 = pDst6 + 1;
pDst8 = pDst7 + 1;
pDst9 = pDst4 + 1;
pDstResult = pDstData + m_nWidth + 1;
for (i=1;i<m_nHeight-1; i++)
{
for (j=1; j<m_nWidth-1; j++)
{
nSum = 0;
nSum += *pDst1;
nSum += *pDst2;
nSum += *pDst3;
nSum += *pDst4;
nSum += *pDst5;
nSum += *pDst6;
nSum += *pDst7;
nSum += *pDst8;
nColum = (*pDst2) & (*pDst9) & (*pDst7);
nMean = nSum>>3;
nInter = nMean>170?255:0;
*pDstResult = nColum | nInter;
pDst1++;
pDst2++;
pDst3++;
pDst4++;
pDst5++;
pDst6++;
pDst7++;
pDst8++;
pDst9++;
pDstResult++;
}
pDst1 += 2;
pDst2 += 2;
pDst3 += 2;
pDst4 += 2;
pDst5 += 2;
pDst6 += 2;
pDst7 += 2;
pDst8 += 2;
pDst9 += 2;
pDstResult += 2;
}
}
2.膨胀
膨胀采用的是8邻域。
void InfoDilate(unsigned char* pImgData, unsigned char* pDstData)
{
int i,j;
unsigned char *pDst1,*pDst2,*pDst3,*pDst4,*pDst5,*pDst6,*pDst7,*pDst8,*pDst9,*pDstResult,k;
memset(pDstData, 0 ,sizeof(unsigned char) * m_nMulti);
pDst1 = pImgData+;
pDst2 = pDst1 + 1;
pDst3 = pDst2 + 1;
pDst4 = pDst1 + m_nWidth;
pDst5 = pDst4 + 1;
pDst6 = pDst4 + 2;
pDst7 = pDst4 + m_nWidth;
pDst8 = pDst7 + 1;
pDst9 = pDst8 + 1;
pDstResult = pDstData + m_nWidth + 1;
for (i=1;i<m_nHeight-1; i++)
{
for (j=1; j<m_nWidth-1; j++)
{
*pDstResult = (*pDst1) | (*pDst2) | (*pDst3) | (*pDst4) | (*pDst5) | (*pDst6) | (*pDst7) | (*pDst8) | (*pDst9);
pDst1++;
pDst2++;
pDst3++;
pDst4++;
pDst5++;
pDst6++;
pDst7++;
pDst8++;
pDst9++;
pDstResult++;
}
pDst1 += 2;
pDst2 += 2;
pDst3 += 2;
pDst4 += 2;
pDst5 += 2;
pDst6 += 2;
pDst7 += 2;
pDst8 += 2;
pDst9 += 2;
pDstResult += 2;
}