匯東網


边缘点判定 isEdgePoint(轮廓)

[編輯] [转简体]
|
作者:huidong | 分類:【編程】EasyX
[ 23 瀏覽 0 評論 7 贊 7 踩 ]

概要

正文

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


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

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;
}



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


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

[ 7] [ 7]


 評論區  0 條評論

+ 添加評論