电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

二值图像轮廓提取

    二值图像轮廓提取只需要挖空内部像素点即可。亮点的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][i] == 0xFF && pLine[0][i+1] == 0xFF &&
                pLine[1][i-1] == 0xFF && pLine[1][i] == 0xFF && pLine[1][i+1] == 0xFF &&
                pLine[2][i-1] == 0xFF && pLine[2][i] == 0xFF && pLine[2][i+1] == 0xFF)
            {
                pLine[0][i-1] = 0;
            }
            else
            {
                pLine[0][i-1] = pLine[1][i];
            }
        }
    }
    return TRUE;
}

轮廓提取效果:

博主
304821123@qq.com
webuserzhy's Blog
webuserzhy
点击跳转