在c#中从图像中选择不规则形状

本文关键字:不规则 选择 图像 | 更新日期: 2023-09-27 18:12:03

我有以下问题,我将尝试解释它。我有一张巨大的政治世界地图。我想获得选定国家的形状(例如加纳,尼泊尔或波兰)。我该怎么做呢?

在c#中从图像中选择不规则形状

这取决于您还能提前提供哪些其他信息。从你的问题和评论中,听起来你打算预先定义你的形状,所以问题不是太难。如果你用一组点来定义每个区域,那么只需检查选择(假设是鼠标点击或类似操作)是否在多边形内。有很多方法可以做到这一点。我想我已经用了以下问题的其中一个答案:

c#点在多边形

类似:

public static bool IsInPolygon(Point[] poly, Point clickedPoint)
{
    if (poly.Length < 3)
    {
        return false;
    }
    Point p1, p2;
    bool inside = false;
    Point oldPoint = new Point(poly[poly.Length - 1].X, poly[poly.Length - 1].Y);
    for (int i = 0; i < poly.Length; i++)
    {
        Point newPoint = new Point(poly[i].X, poly[i].Y);
        if (newPoint.X > oldPoint.X)
        {
            p1 = oldPoint;
            p2 = newPoint;
        }
        else
        {
            p1 = newPoint;
            p2 = oldPoint;
        }
        if ((newPoint.X < clickedPoint.X) == (clickedPoint.X <= oldPoint.X)
            && (clickedPoint.Y - (long)p1.Y) * (p2.X - p1.X) < (p2.Y - (long)p1.Y) *(clickedPoint.X - p1.X))
        {
            inside = !inside;
        }
        oldPoint = newPoint;
    }
    return inside;
}

我还没有测试过上面的代码,所以如果你使用它,我要确保正确地测试它。

如果你不能预先定义形状,那么你可能必须使用某种分析方法来挑选形状。如果你使用一张带有实线的干净地图,就不会太难。任何类型的洪水填充算法都应该能够挑选出单个国家(显然你必须处理特殊情况,比如一个国家由两个不同的地区组成)。从那里,从每个形状中获得一组点,可以使用简单的行进平方算法来完成。如果需要,您可以根据需要的精度级别减少点的数量。