【问题标题】:How to detect the different layers in an Image如何检测图像中的不同层
【发布时间】:2013-10-16 14:19:56
【问题描述】:

我正在 WPF C# 中开发一个应用程序,其中我有一个图像,我想检测图像的不同图层,以便我可以通过从颜色托盘中选择任何颜色来更改图层的颜色(要么正常颜色或渐变颜色)。

假设我有上面的 Image ,在 Image 中有不同的层,比如(墙壁、沙发、瓷砖、窗户、枕头等)。现在我的问题是如何检测图像的 墙层 并将其颜色从 黄色渐变更改为正常颜色或渐变颜色 ,其他层相同像 sofa 这样的图像,检测 sofa 并将其颜色从白色更改为其他颜色 并且与图像的 window 、 floor 、pillow 层相同。

【问题讨论】:

  • (墙、沙发、瓷砖、窗户)不叫图层
  • 也许您应该阅读有关图像处理和模式识别的内容
  • shadow,无论你要使用什么词(墙、沙发、瓷砖、窗户)层,但我希望你能理解我的问题。
  • 您实际上是在谈论非常广泛的话题,这并不容易,并且需要大量的图像处理。您必须分析边界以检测图像中的不同对象,然后应用颜色变换
  • 到目前为止你做了什么?

标签: c# javascript html wpf


【解决方案1】:

我认为您误解了图像中存储的内容。您会注意到,您可能在像 PhotoShop 这样的程序中创建的图层只能以 PhotoShop 自己的格式保存,而不能以 .Net 支持的更常见的图像格式(png、bmp、gif、jpg)保存。一旦您以其中一种格式加载了图像,您就会发现基本上只有一个二维颜色数组。没有任何东西可以将一个像素与其邻居或任何其他像素分开或链接。所以绝对没有层的概念。

您可以提供某种算法来遍历您的图像,寻找在容差范围内的像素,并以这种方式定义它们的集合,但这会产生非常糟糕的结果。如果您不确定我的意思,请尝试在您最喜欢的图像编辑器中对图像执行泛光填充。

为了获得更好的效果,请不要在应用程序中使用单个图像,而是使用一组图像,每个图层一个,这样您就可以在显示合成时将它们重新组合在一起之前重新着色所需的图层图片。

 <Grid>
   <Image Source="Background"/>
   <Image Source="RecolouredImage"/>
   <Image Source="Foreground"/>
 </Grid

当然,这仅适用于您在开发时控制图像的情况,而不是用户在运行时加载的图像。

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    相关资源
    最近更新 更多