边缘点判定 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; }
根据自己的需要改来用吧。
改变筛选网格,可以获得更多的效果。