Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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
有没有办法通过VB.NET获取图像文件并使其背景透明?_Vb.net_Image - Fatal编程技术网

有没有办法通过VB.NET获取图像文件并使其背景透明?

有没有办法通过VB.NET获取图像文件并使其背景透明?,vb.net,image,Vb.net,Image,我们有一个通过单反相机拍摄人脸的系统。我们需要有透明背景的人物图像。我们目前正在做的是拍摄图像,在Photoshop中编辑和裁剪,用神奇的橡皮擦工具删除背景图像 我正在寻找的是一种方法来解析图像,并自动删除我们的半白色背景,以及调整大小和裁剪。是否有某种库或代码示例可以在不需要手动干预的情况下执行此操作?您可以以此作为处理单个图像的起点 基本上,如果你有一个恒定的背景色(比如电视的绿色屏幕),只需选择接近你要擦除的颜色的像素并将其Alpha级别设置为0(透明)。将RGB值视为XYZ坐标,可以与

我们有一个通过单反相机拍摄人脸的系统。我们需要有透明背景的人物图像。我们目前正在做的是拍摄图像,在Photoshop中编辑和裁剪,用神奇的橡皮擦工具删除背景图像


我正在寻找的是一种方法来解析图像,并自动删除我们的半白色背景,以及调整大小和裁剪。是否有某种库或代码示例可以在不需要手动干预的情况下执行此操作?

您可以以此作为处理单个图像的起点

基本上,如果你有一个恒定的背景色(比如电视的绿色屏幕),只需选择接近你要擦除的颜色的像素并将其Alpha级别设置为0(透明)。将RGB值视为XYZ坐标,可以与背景颜色保持3d距离,并使某个阈值内的所有内容透明

作为一项改进,您还可以将另一个阈值内的所有内容都设置为半透明,以便头发周围的边缘和类似的东西看起来更柔软、更不粗糙

或者,你也可以在Photoshop中做同样的事情,效果很好,因为它应该支持批处理


编辑,再考虑一下,你可能想使用绿色屏幕类型的背景,而不是像你所说的白色背景,因为你可以使人们的眼睛透明。我肯定会尝试在Photoshop/Gimp/等中对其进行批处理。

您可以以此作为处理单个图像的起点

基本上,如果你有一个恒定的背景色(比如电视的绿色屏幕),只需选择接近你要擦除的颜色的像素并将其Alpha级别设置为0(透明)。将RGB值视为XYZ坐标,可以与背景颜色保持3d距离,并使某个阈值内的所有内容透明

作为一项改进,您还可以将另一个阈值内的所有内容都设置为半透明,以便头发周围的边缘和类似的东西看起来更柔软、更不粗糙

或者,你也可以在Photoshop中做同样的事情,效果很好,因为它应该支持批处理


编辑,再考虑一下,你可能想使用绿色屏幕类型的背景,而不是像你所说的白色背景,因为你可以使人们的眼睛透明。我肯定会尝试在Photoshop/Gimp/等中批处理它。

这是一个真正复杂的问题。如下面的答案所示,您需要对每个像素进行模糊匹配,并将其设置为透明,但您还需要检测附近的其他像素,以确保它们的颜色不接近。衬衫上的白色标签,白色的眼睑,头发,苍白的皮肤反射出闪光。所有候选对象都将被任何贪婪模糊逻辑删除

想想Photoshop中的魔杖工具吧。它在检测图片中人物的边缘方面有多好?是的,这是图像编辑软件的最高标准,有数千个工程小时

对于问答格式来说,这不是一个可行的要求,这是人类比机器做得更好的事情之一。但是,这并不意味着这是不可能的,谁知道呢,你可能就是那个做这件事的人。请不要在VB.NET中执行此操作:)

使用一些伪代码了解您需要执行的操作:

Bitmap faceShot = Bitmap.FromFile(filepath)
foreach pixel in faceShot
    //the following line is where the magic happens, you can do any fuzzy match on the color that suits you
    //figure out your color range and do a fuzzy match percentage wise
    if (pixel between RGB(255,255,255) and RGB(250,235,215)) //white and antique white
        pixel.setAlpha=0
    endif
end foreach

这是一个真正复杂的问题。如下面的答案所示,您需要对每个像素进行模糊匹配,并将其设置为透明,但您还需要检测附近的其他像素,以确保它们的颜色不接近。衬衫上的白色标签,白色的眼睑,头发,苍白的皮肤反射出闪光。所有候选对象都将被任何贪婪模糊逻辑删除

想想Photoshop中的魔杖工具吧。它在检测图片中人物的边缘方面有多好?是的,这是图像编辑软件的最高标准,有数千个工程小时

对于问答格式来说,这不是一个可行的要求,这是人类比机器做得更好的事情之一。但是,这并不意味着这是不可能的,谁知道呢,你可能就是那个做这件事的人。请不要在VB.NET中执行此操作:)

使用一些伪代码了解您需要执行的操作:

Bitmap faceShot = Bitmap.FromFile(filepath)
foreach pixel in faceShot
    //the following line is where the magic happens, you can do any fuzzy match on the color that suits you
    //figure out your color range and do a fuzzy match percentage wise
    if (pixel between RGB(255,255,255) and RGB(250,235,215)) //white and antique white
        pixel.setAlpha=0
    endif
end foreach

永远不要使用它,但我认为这是一个很好的起点:。找到一个可以操纵图像透明、裁剪和调整大小的库将很容易。我更喜欢。但是,编写知道如何使图像透明的人工智能,特别是在头发方面,如果你能为其制定规则,那将是一件痛苦的事情。永远不要使用它,但我认为这是一个很好的起点:。找到一个可以操纵图像透明、裁剪和调整大小的库将很容易。我更喜欢。但是,如果你能为它制定规则,那么写一个知道如何使其透明的人工智能,尤其是在头发方面,将是一件痛苦的事情。小免责声明:你可以使用VB.NET,我对此没有任何反对意见。我只是想让这篇文章的语气轻松一些。如果你只需要一个模糊匹配,那么Kratz的答案无疑是一个很好的起点。小免责声明:你可以使用VB.NET,我对此没有异议。我只是想让这篇文章的语气轻松一些。如果你只需要一个模糊匹配,那么克拉茨的答案无疑是一个很好的起点。