Kai*_*Kai 2 c# c++ math graphics
我想向逻辑上的任何人请求帮助,以及制定图像轮廓的更好的示例代码.
为了更清楚,我说的是一个透明的图像.比方说,我有一个中间有多边形的PNG图像,或者更好的岛屿顶视图.现在,我想跟踪轮廓并在其上设置颜色.就像Adobe Photoshop中的效果'笔画'一样.
我已经完成了那么多,我已经创建了一个跟踪轮廓的程序.但我的问题是,它是线性扫描.从左到右,然后向下,然后再从左到右.我相信你明白了.我希望跟踪流动,就像你手动跟踪它一样.跟你一样跟踪圈子.
其目的是将其用作准确悬停多边形的触发区域.而且我的问题是,例如,有两个岛.
我希望我的疑问很明确.任何建议,样品都表示赞赏.但如果它是ac#代码形式或伪代码并有一些解释,那就更好了.
非常感谢提前.
- 增加:
另外,我想(我想我已经忘记提及)以顺序方式记录笔画的坐标.所以我可以稍后操纵它们.这就是为什么我想以流动的方式制作概述逻辑.这是我正在寻找的算法.非常感谢!
一种方法是使用通用边缘检测算法.例如,Sobel边缘检测.但是,它没有针对干净,抗锯齿,双色图像进行优化,如下例所示,因此产生了一些粗略的结果.为了更好地保留抗锯齿,并获得平滑的结果,我建议使用以下算法:
Image blurredImg = gaussianBlur(sourceImg, blurRadius = desiredOutlineWidth);
const float sharpnessCoef = 0.1; // value may need tuning or may need to
// depend on the blur radius
Image dilatedImg = from blurredImg, map all pixels with
brightness > sharpnessCoef to white and
multiply the rest by 1 / sharpnessCoef
Image smoothResult = subtract sourceImg from dilatedImg
Run Code Online (Sandbox Code Playgroud)
例:
