我們有一個系統,通過數碼單反相機拍攝人臉。我們需要透明背景的人物形象。我們目前正在做的是在Photoshop中對圖像進行編輯和裁剪,使用Magic Eraser工具刪除背景圖像。有沒有辦法通過VB .NET獲取圖像文件並使其背景透明?
我在尋找的是一種解析圖像並自動擦除我們擁有的半白色背景以及調整大小和裁剪的方法。是否有某種類型的庫或代碼示例在不需要手動干預的情況下執行此操作?
我們有一個系統,通過數碼單反相機拍攝人臉。我們需要透明背景的人物形象。我們目前正在做的是在Photoshop中對圖像進行編輯和裁剪,使用Magic Eraser工具刪除背景圖像。有沒有辦法通過VB .NET獲取圖像文件並使其背景透明?
我在尋找的是一種解析圖像並自動擦除我們擁有的半白色背景以及調整大小和裁剪的方法。是否有某種類型的庫或代碼示例在不需要手動干預的情況下執行此操作?
您可以用此啓動爲起點處理單個圖像,
http://www.java2s.com/Code/VB/2D/ProcessanImageinvertPixel.htm
基本上,如果你有一個恆定的背景顏色(如電視綠屏),它只是一個問題選擇與您正在擦除的顏色接近的像素,並將其Alpha級別設置爲0(透明)。處理像XYZ座標這樣的RGB值,您可以與背景顏色做一個3d距離,並使某個閾值內的所有內容都透明。
作爲一種改進,你也可以使另一個門檻內的所有東西都變成半透明的,所以頭髮周圍的邊緣和像這樣的東西看起來更柔和,更不刺耳。
或者,您可能可以在Photoshop中做同樣的事情並獲得好的效果,因爲它應該支持批處理。
編輯,再想一下,你可能想要使用綠色屏幕類型的背景,而不是像你說的那樣是灰白色的背景,因爲你可能會讓人的眼睛變得透明。我一定會嘗試在Photoshop/Gimp/etc中進行批處理。
這是一個真正的複雜問題。就像下面的答案一樣,您需要對每個像素進行模糊匹配,並將其設置爲透明,但您還需要檢測其他附近的像素以確保它們不會接近顏色。襯衫上的白色標記,白色的眼皮,頭髮,反射閃光的蒼白皮膚。所有的候選人都可以通過任何貪婪的模糊邏輯去除。
想想Photoshop中的Magic Wand工具。檢測圖片中人物的邊緣有多好?是的,這是圖像編輯軟件的最高標準,它有數千個工程小時。
這不是一個可行的Q &格式的請求,這是人類比機器做得更好的事情之一。但是,這並不意味着這是不可能的,誰知道,你可能是做這件事的人之一。只是不這樣做在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,我沒有任何反對。我只想減輕帖子的語氣。 如果模糊匹配是你所需要的,那麼克拉茨的答案是一個很好的起點。 – Mataniko
找到可以操作的圖像是透明的圖書館和裁剪和調整大小將很容易。我更喜歡[The FreeImage Project](http://freeimage.sourceforge.net)。但是編寫知道要透明化的AI,尤其是涉及到頭髮的AI,假設你可以爲它制定規則將是一個痛苦。 – Alexander
永遠不要使用它,但我認爲這是一個好的起點:[Bitmap.MakeTransparent方法](http://msdn.microsoft.com/it-it/library/system.drawing.bitmap.maketransparent.aspx)。 – tezzo