【问题标题】:How I can detect the background of an image programmatically?如何以编程方式检测图像的背景?
【发布时间】:2010-09-09 02:09:33
【问题描述】:

我需要开发一个软件,可以从背景为纯色(绿色,如电影中的绿色)的照片中选择人脸。

然后我们想用另一个背景图像组合该选择,这部分很容易与许多库一起使用。但是不知道怎么选?你能提供一些链接或库来调查吗?我可以使用我选择的任何语言来完成这个项目,因此欢迎使用任何语言的示例或链接。

【问题讨论】:

  • 从概念上讲,这实际上非常简单 - 只需将绿色背景像素转换为 0 alpha 值,然后将图像绘制到您想要的任何背景图像上。在实践中,边界边缘可能​​会有些棘手。你能多描述一下你正在使用的技术吗?即,这是windows、C++等吗
  • GrandmasterB,感谢您的回复。我可以在 Windows 中使用任何语言或平台,我在考虑使用 Java 或 C#。你能分享一个链接或例子吗?我想做一些研究,但在 google 中找不到太多信息。

标签: image-processing image-manipulation


【解决方案1】:

好的,您尝试做的就是所谓的色度键。就像你说的,它在蓝/绿屏幕的电影中使用了很多。在 Windows 上它实际上很容易做到,因为它作为 GDI+ 的一部分内置在 Windows 中(或者在 C# 上,我认为它只是称为 Graphics 类)。

我手头没有任何示例代码,但过程非常简单:

使用 GDI+,您可以创建前景图像的位图对象(具有绿色背景的图像)。然后创建一个 ImageAttributes 对象。使用 ImageAttribute 对象的 SetColorKey() 方法来指定颜色或颜色范围以用作背景颜色。最后,在目标位图上绘制该位图对象,GDI+ 会将其绘制为背景色是透明的。

在代码中还有更多内容,但从概念上讲,仅此而已。

【讨论】:

    【解决方案2】:

    这可能是一个比 RGB 更容易在其他空间中工作的领域 - 例如 HSV。

    我也会看看 OpenCV 库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2016-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多