Warning: file_get_contents() [function.file-get-contents]: SSL: 远程主机强迫关闭了一个现有的连接。 in D:\wwwroot\huidong\wwwroot\function.inc.php on line 884

Warning: file_get_contents(https://whois.pconline.com.cn/jsLabel.jsp?ip=127.0.0.1) [function.file-get-contents]: failed to open stream: HTTP request failed! in D:\wwwroot\huidong\wwwroot\function.inc.php on line 884
边缘点判定 isEdgePoint(轮廓) - huidong

huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


原理是:根据周围点与当前点的颜色差是否大于阈值,确定它是否为边缘点


之前我就用了这个函数,这次单独提取出来

http://huidong.xyz/?mode=2&id=375

http://huidong.xyz/?mode=2&id=374

http://huidong.xyz/?mode=2&id=395 



适用性最强的:

// 是否为边缘点
// b 灰度差阈值
bool isEdgePoint(DWORD* pBuf, int w, int h, int x, int y, int b)
{
    POINT t[4] = { {0,1}, {0,-1}, {1,0}, {-1,0} };
    int r = GetRValue(pBuf[y * w + x]);
    for (int i = 0; i < 4; i++)
    {
        int x2 = x + t[i].x, y2 = y + t[i].y;
        if (x2 >= 0 && x2 < w && y2 >= 0 && y2 < h && GetRValue(pBuf[y2 * w + x2]) - r > b)
        {
            return true;
        }
    }
    return false;
}

其次:

// 是否为边缘点
// b 灰度差阈值
bool isEdgePoint(int x, int y, int b)
{
    POINT t[4] = { {0,1}, {0,-1}, {1,0}, {-1,0} };
    int r = GetRValue(getpixel(x, y));
    for (int i=0; i<4; i++)
    {
        if (GetRValue(getpixel(x+t[i].x, y+t[i].y)) - r > b)
        {
            return true;
        }
    }
    return false;
}

再次:

// 是否为边缘点
bool isEdgePoint(int x, int y)
{
    POINT t[4] = { {0,1}, {0,-1}, {1,0}, {-1,0} };
    //POINT t[4] = { {0,2}, {0,-2}, {2,0}, {-2,0} };
    if (getpixel(x, y) != WHITE)
    {
        return false;
    }
    for (int i=0; i<4; i++)
    {
        if (getpixel(x+t[i].x, y+t[i].y) != WHITE)
        {
            return true;
        }
    }
    return false;
}


根据自己的需要改来用吧。


改变筛选网格,可以获得更多的效果。



返回首页


Copyright (C) 2018-2024 huidong