2012-05-01 2 views
0

Я хотел бы получить некоторую помощь относительно обнаружения цвета фона изображения jpg.Обнаружение цвета фона изображения

У меня есть много изображений в исходном каталоге, и я хочу прочитать их один за другим в своем приложении ASP.NET и определить, есть ли у них белый фон или нет.

Как определить цвет фона?

+1

Вы можете прочитать каждый пиксель в изображении и проверьте, какой цвет будет более повторяться ... не самое лучшее, но может решить вашу проблему – ivowiblo

+0

Дитто @ivowiblo, хотя вероятно, достаточно просто прочитать крайние пиксели. –

ответ

0

Я думаю, вы имеете в виду, если цвет пикселей, близких к границам изображения, белый. В противном случае ваша формулировка слишком расплывчата.

Вы можете проверить только что пиксели вокруг границ белые (вы можете рассмотреть возможность сделать некоторые разглаживанию первым утолить шум)

+0

Не могли бы вы дать мне знать, как это сделать? – thatsmeuc

1

Вы не можете просто прочитать пограничные пиксели, которые дают ошибочные результаты для икон которые имеют рамку вокруг границы, например логотип LoveFilm вернется красным, когда ответ будет белым.

Подсчет самого повторяющегося цвета также будет вводить в заблуждение, в случае, например, логотипа MSDN, фон прозрачен (как и граница), но наиболее повторяющийся цвет, вероятно, будет темно-синим (я не подсчитываются).

+0

Возможно, синий цвет _is_, а ваш мозг просто не интерпретирует правильный образ :) (+1) –

+0

jpeg не может быть прозрачным, и даже если он может быть не белый, он прозрачный :) –

+0

Aye, JPEGs не имеют альфа-информации, они были просто примерами изображений, хотя большинство людей знали (или легко находили), которые подтвердили мою точку зрения, что одно правило, вероятно, не устраивает все сценарии. – 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? Это не правильно. –

Смежные вопросы