Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 图像处理-定义源图像的选择_C#_Image Processing - Fatal编程技术网

C# 图像处理-定义源图像的选择

C# 图像处理-定义源图像的选择,c#,image-processing,C#,Image Processing,例如,我有以下两幅图像: 我想加载第二个并检测透明区域,作为我可以应用一些处理的选择,但我不知道如何开始。我熟悉加载图像、在上面绘制形状和文本,但仅此而已 我如何在透明区域上进行某种“魔杖”检测,以获得一些点阵列或用于操纵的区域的其他定义 编辑:在第二幅图像中,白色区域实际上是透明区域。由于imageshack的背景色,它们显示为白色。如果位图对象是您用来加载图像的对象,则可以使用Bitmap.GetPixel()检查像素的alpha值(0完全透明,255完全不透明),从而检查像素是否透明

例如,我有以下两幅图像:


我想加载第二个并检测透明区域,作为我可以应用一些处理的选择,但我不知道如何开始。我熟悉加载图像、在上面绘制形状和文本,但仅此而已

我如何在透明区域上进行某种“魔杖”检测,以获得一些点阵列或用于操纵的区域的其他定义


编辑:在第二幅图像中,白色区域实际上是透明区域。由于imageshack的背景色,它们显示为白色。

如果位图对象是您用来加载图像的对象,则可以使用Bitmap.GetPixel()检查像素的alpha值(0完全透明,255完全不透明),从而检查像素是否透明

如果你只需要对每个透明像素做些什么,我想没有必要在一个单独的对象中创建一个选择。只要迭代像素,如果一个像素是透明的,就做你必须做的事情

如果确实需要创建选择,则可以使用与原始图像大小相同的单独的每像素1位位图。白色表示选定区域,黑色表示未选定(或相反,由您选择)

见:

如果位图对象是您用来加载图像的对象,则可以使用Bitmap.GetPixel()检查像素的alpha值(0完全透明,255完全不透明),从而检查像素是否透明

如果你只需要对每个透明像素做些什么,我想没有必要在一个单独的对象中创建一个选择。只要迭代像素,如果一个像素是透明的,就做你必须做的事情

如果确实需要创建选择,则可以使用与原始图像大小相同的单独的每像素1位位图。白色表示选定区域,黑色表示未选定(或相反,由您选择)

见:

这看起来像是一个简单的问题,只显示完整的贴图图像,并将光标坐标移动到该图像上时映射到遮罩图像的相应坐标。你可以在这里做两件事。将遮罩图像保持为黑白,并将每个区域的贴图与某个对象关联,该对象定义在该区域悬停时要执行的操作。或者,将遮罩更改为多色图像,只需将每个颜色代码映射到某个定义在该区域悬停时要执行的操作的对象。我个人会选择后者,因为它要简单得多,并且您可能会有大约1600万个可用区域(给定24位颜色)

给定一个简单的映射类型:

class ZoneMap
{
    public Color MappedColor { get; set; }
    public Action OnHover { get; set; }
}
您可以通过将源图像的鼠标坐标转换为多色分区地图图像的相应坐标来查找映射分区,按颜色查找分区地图条目,并调用其OnHover操作:

var spainZones = new ZoneMap[]
{
    new ZoneMap { MappedColor = Color.Red, OnHover = new Action(RedHandler) },
    new ZoneMap { MappedColor = Color.Blue, OnHover = new Action(BlueHandler) }
}

var color = getZoneColor(Mouse.X, Mouse.Y); // translate source mouse coords to colored zone map coords and get color
var zone = spainZones.FirstOrDefault(zm => zm.MappedColor == color);

zone.OnHover();

我知道这很艰难。如果我有更多关于在特定区域悬停时要执行的操作的信息,我可能能够提供更多信息。

这看起来像是一个简单的问题,只显示完整的地图图像,并将光标坐标移动到该图像上时映射到遮罩图像的相应坐标。你可以在这里做两件事。将遮罩图像保持为黑白,并将每个区域的贴图与某个对象关联,该对象定义在该区域悬停时要执行的操作。或者,将遮罩更改为多色图像,只需将每个颜色代码映射到某个定义在该区域悬停时要执行的操作的对象。我个人会选择后者,因为它要简单得多,并且您可能会有大约1600万个可用区域(给定24位颜色)

给定一个简单的映射类型:

class ZoneMap
{
    public Color MappedColor { get; set; }
    public Action OnHover { get; set; }
}
您可以通过将源图像的鼠标坐标转换为多色分区地图图像的相应坐标来查找映射分区,按颜色查找分区地图条目,并调用其OnHover操作:

var spainZones = new ZoneMap[]
{
    new ZoneMap { MappedColor = Color.Red, OnHover = new Action(RedHandler) },
    new ZoneMap { MappedColor = Color.Blue, OnHover = new Action(BlueHandler) }
}

var color = getZoneColor(Mouse.X, Mouse.Y); // translate source mouse coords to colored zone map coords and get color
var zone = spainZones.FirstOrDefault(zm => zm.MappedColor == color);

zone.OnHover();

我知道这很艰难。如果我有更多关于在特定区域悬停时要做什么的信息,我可能能够提供更多信息。

我想这接近我想要的。基本思想是清晰地处理各个区域(想想拼图)。最终的结果与warfish.net处理游戏地图的方式类似。我想向用户展示原始图像,检测点击,并根据叠加使用相同颜色的相邻像素对所有相同颜色的相邻像素进行处理(例如,用颜色填充区域),我的意思是。原始源图像仅用于演示目的-目的是让覆盖定义图像的可操作区域。@克里斯:对,仅显示原始源图像。但是,只要源图像和区域地图图像大小相同,当鼠标悬停在源图像上时,就可以轻松地将鼠标坐标映射到区域地图图像。一旦你有了区域的颜色,按颜色查找正确的区域映射条目,并调用它的OnHover操作,就相当简单了。好吧,我明白你的意思,但假设我想把区域映射到特定的颜色,然后在上面做高斯模糊。我现在不担心操作的算法,但我如何整体操作整个贴图区域,而不是逐像素检查颜色?可能有多种方法。由于每个区域的OnHover操作都是唯一的,所以您几乎可以做任何您想做的事情。如果要模糊悬停区域的区域,可以加载另一幅图像,该图像仅遮住要模糊的区域,然后应用模糊算法。这些天空间很便宜,所以我不会太担心使用一个单一的遮罩图像来完成所有你想做的事情。分别解决每个问题。有色人种