【发布时间】:2020-02-11 18:42:26
【问题描述】:
所以我正在做的是在 vb.net 中创建一个简单的绿屏图像生成器。我的代码很简单(虽然可能不是最有效的)
Dim overlay As Bitmap = New Bitmap(My.Resources.GreenScreen)
Dim backImage As Bitmap = New Bitmap(My.Resources.Tunnel)
Dim x As Integer
Dim y As Integer
For x = 0 To overlay.Width - 1
For y = 0 To overlay.Height - 1
Dim pixelColor As Color = overlay.GetPixel(x, y)
If pixelColor = Color.FromArgb(255, 0, 254, 0) Then
overlay.MakeTransparent(overlay.GetPixel(x, y))
End If
Next
Next
Dim g As Graphics = Graphics.FromImage(backImage)
g.DrawImage(overlay, 0, 0)
PictureBox1.Image = backImage
但现在它可以工作,我很满意(有点)
我所面临的是,我下载了一张有人站在绿屏前的示例图像。上面的代码删除了大部分绿色,但不是全部。我需要羽化主题的边缘(我认为这就是所谓的)。
我的想法是我需要捕捉图像中所有不同的绿色阴影,有没有办法可以指定 RGB 的最大和最小范围?
【问题讨论】:
-
考虑使用 OpenCV (Nuget Emgu.CV) 并且您正在寻求的操作是色度键控
-
如果不使用 OpenCV,您的方法可以通过锁定位图来加速。 This approach 使用透明蒙版,您当然可以使用。
-
Chroma-key effect 是Direct-2D 的内置功能,以防您感兴趣。您会在许多开源商业软件中看到这些过滤器的作用。简单地替换像素的内容不会让你走得太远。
标签: vb.net