原创 二值图像轮廓提取

2009-2-23 22:27 5491 8 8 分类: 软件与OS

    二值图像轮廓提取只需要挖空内部像素点即可。亮点的8个相邻像素点全部为亮点,则该点为内部点,反之为轮廓点。将所有内部点置为背景点,完成轮廓提取。


// 轮廓提取
// 1. pImageData   图像数据
// 2. nWidth       图像宽度
// 3. nHeight      图像高度
// 4. nWidthStep   图像行大小
BOOL FindContours(unsigned char *pImageData, int nWidth, int nHeight, int nWidthStep)
{
    int            i        = 0;
    int            j        = 0;
    unsigned char *pLine[3] = { NULL, NULL, NULL };
    for (j = 1; j < nHeight - 1; j++)
    {
        pLine[0]  = pImageData + nWidthStep * (j - 1);
        pLine[1]  = pImageData + nWidthStep * j;
        pLine[2]  = pImageData + nWidthStep * (j + 1);
        for (i = 1; i < nWidth - 1; i++)
        {
            if (pLine[0][i-1] == 0xFF && pLine[0] == 0xFF && pLine[0][i+1] == 0xFF &&
                pLine[1][i-1] == 0xFF && pLine[1] == 0xFF && pLine[1][i+1] == 0xFF &&
                pLine[2][i-1] == 0xFF && pLine[2] == 0xFF && pLine[2][i+1] == 0xFF)
            {
                pLine[0][i-1] = 0;
            }
            else
            {
                pLine[0][i-1] = pLine[1];
            }
        }
    }
    return TRUE;
}


轮廓提取效果:



5781afd2-47a7-4670-838e-eaa50b24d56f.gif71b5afd2-acd6-474a-bc79-35bdd2cfe25b.gif

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条