2012-05-01 137 views
0

我想獲得一些關於檢測jpg圖像背景顏色的幫助。檢測圖像的背景顏色

我在源目錄中有很多圖像,我想在我的ASP.NET應用程序中逐一讀取它們,並檢測它們是否具有白色背景。

如何檢測背景顏色?

+1

可以讀取圖像中的每個像素,並檢查其顏色更重複......不是最好的,但可能解決您的問題 – ivowiblo

+0

同上@ivowiblo,雖然它是可能只是爲了讀取邊緣像素。 –

回答

0

我想你的意思是如果接近圖像邊界的像素的顏色是白色的。 否則你的配方太模糊。

您可以檢查這一點,周圍的邊框的像素是白色的(你可以考慮首先做一些平滑淬火噪聲)

+0

你可以讓我知道如何做到這一點? – thatsmeuc

1

你不能只是讀邊界像素,將給予圖標的誤導結果在邊界附近有一個盒子,例如當答案應該是白色時,LoveFilm徽標將返回紅色。計數最重複的顏色也會引起誤解,例如在MSDN徽標的情況下,背景是透明的(邊框),但最重複的顏色可能是深藍色(我沒有計數)。

+0

也許藍色是背景色,而你的大腦只是不能解釋正確的圖像:)(+1) –

+0

jpeg不能透明,即使它不是白色,也是透明的:) –

+0

Aye,JPEGs沒有alpha信息,它們只是圖像的例子,儘管大多數人會知道(或者很容易找到)這些圖像支持了我的觀點,即一條規則可能不適合所有場景。 – joocer

1

你應該嘗試使用與getPixel功能,你可以在這裏找到一些文檔:

GetPixel Function

你只需要選擇的座標,以獲得一個RGB值。

然後,您可以嘗試使用盡可能多的座標,因爲您希望具有很多價值。

只要檢查你的值,以知道它是否是白色的。

0

嘗試這樣:

public bool IsBackgroundWhite(Bitmap theImageBitmap) 
{ 
    Bitmap bmp = new Bitmap(theImageBitmap); 
    int weight = 0; 

    for (int x=0;x<bmp.Width;x++) { 
     weight += GetWeight(bmp.GetPixel(x,0)); 
     weight += GetWeight(bmp.GetPixel(x,bmp.Height-1)); 
    } 

    for (int y=0;y<bmp.Height;y++) { 
     weight += GetWeight(bmp.GetPixel(0,y)); 
     weight += GetWeight(bmp.GetPixel(bmp.Width-1,y)); 
    } 

    if (weight > 255) 
     return true; 
    return false; 
} 

private int GetWeight(Color c) 
{ 
    if (c.R >= 200 && c.B >= 200 && C.G >= 200) 
    { 
     int n1 = 255 - c.R; 
     int n2 = 255 - c.G; 
     int n3 = 255 - c.B; 

     return (int)((n1+n2+n3)/3) 
    } 
} 
+0

這段代碼是否貫穿圖像上的所有像素?會不會包含圖片及其背景?我只想檢查背景..所以這個代碼工作在所有圖像上..你能幫忙嗎? – thatsmeuc

+0

@nehaaggarwal - 編號此代碼僅通過圖像的邊界運行。第一個'for'循環遍歷頂部和底部邊界,第二個'for'循環遍歷左右邊界。此外,此代碼使用「加權」值,這意味着如果邊框爲白色或者其中一個邊框由於陰影而完全不是白色,例如它仍會註冊爲白色邊框。 – Icemanind

+0

@thatsmeuc:你爲什麼試圖編輯這個帖子並刪除icemanind的代碼?那是不對的。 –