【问题标题】:Get all the coordinates inside any shape获取任意形状内的所有坐标
【发布时间】:2018-10-15 06:45:46
【问题描述】:

我正在创建一个应用程序,为此我必须找到任意freeshape 的坐标。 我已尝试实现该功能,但无法识别所有坐标。

我有array中形状边界的坐标值。

就像有任何形状,那么我怎样才能找出其中的所有坐标并将它们放入list<Point>

【问题讨论】:

  • 您担心速度吗?如果没有,只需编写一个简单的循环来检查光栅化的输出是否有明亮的像素,然后附加到一个列表中。
  • 我不太明白你能解释一下吗
  • 可能重复:stackoverflow.com/questions/6486499/…。除非你问的是光线投射本身。
  • 是的,它是在获取坐标后进行图像处理的,我必须在该坐标上找到图像的像素值。
  • 我还是不明白,为什么你需要所有个像素?最终目标是什么?

标签: c# coordinates


【解决方案1】:

编辑:据我了解,您希望将形状的内部乘以与每个像素对应的导热率图。

我会推荐:

  • 对形状内部进行泛洪填充。 (请参阅 AForge.NET 等图像处理库。)
  • 将它与您的热导图执行逐元素乘法。 (参见数值库。)

结果是“温度”的热图。您可以根据需要进一步处理。


如果您不关心速度,请获取光栅化输出并简单地检查是否存在明亮的像素:

var img = /* some 2D array */;
var list = new List<Tuple<int, int>>();

foreach ((var row, var j) in img.Select((x, i) => Tuple.Create(x, i))) {
    foreach ((var pixel, var i) in row.Select((x, i) => Tuple.Create(x, i))) {
        if (pixel == 255) {
            list.Add(Tuple.Create(i, j));
        }
    }
}

也许是 LINQ 版本:

img
    .Select((r, j) => new {row = r, j = j})
    .Select((t, j) => t.row
        .Select((p, i) => new {p = p, i = i, j = j})
        .Where(t => t.p == 255)
        .Select(t => Tuple.Create(t.i, t.j)))
    .SelectMany(x => x);

【讨论】:

  • 形状内的像素会发生什么
  • 我很困惑:您想要边界像素...还是边界内的像素列表?
  • 我想要边界内的像素
  • 好吧,我想我终于明白这是怎么回事了。我会在上面的编辑中推荐以下方法,而不是寻找所有像素的列表。
  • 感谢先生的宝贵建议,但目前我需要形状内的像素坐标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-07
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多