Мне нужно направление для этого. Я повторяю все пиксели и получаю значение через функцию getpixel. Что я должен делать дальше?Как получить лучшие 5 самых популярных цветов rgb из изображения?
ответ
Совокупность их в Dictionary<Color, int>
, где вы храните счетчик для каждого цвета. После того, как вы выполнили итерацию над всеми из них, извлеките верхнюю 5, отсортированную по значению (счет).
Менее хорошо выполнять, но более простое решение заключается в следующем:
(from c in allColors
group c by c into g
order by g.Count() descending
select g.Key).Take(5)
Я не буду писать код для вас, но дать общее описание того, что вам нужно:
- Структура данных, которая содержит каждый цвет и количество раз, которое появляется
- Для каждого пикселя, если цвет существует в вашей структуре данных, увеличьте число 2.a если цвет не существует, добавьте его с количеством 1
- После того, как вы прошли через все пиксели, сортировать структуру по колу и получить топ 5
Создать словарь как это:
Dictionary<Color, int> dictColors = new Dictionary<Color, int>();
тогда, когда вы перебор каждого пикселя, сделать это
Color color =GetPixel(x,y);
if(!dictColors.Contains(color))
{
dictColors.Add(color,0);
}
else
{
dictColors[color]++;
}
then take first five:
var top5 = dictColors.Take(5);
Вы пробовали этот код? –
Здесь вспомогательная функция, чтобы получить все пиксели:
public static IEnumerable<Color> GetPixels(Bitmap bitmap)
{
for (int x = 0; x < bitmap.Width; x++)
{
for (int y = 0; y < bitmap.Height; y++)
{
Color pixel = bitmap.GetPixel(x, y);
yield return pixel;
}
}
}
Если вам просто нужно цвета (без счетчиков):
using (var bitmap = new Bitmap(@"..."))
{
var mostUsedColors =
GetPixels(bitmap)
.GroupBy(color => color)
.OrderByDescending(grp => grp.Count())
.Select(grp => grp.Key)
.Take(5);
foreach (var color in mostUsedColors)
{
Console.WriteLine("Color {0}", color);
}
}
Кстати, здесь выбор топ-5 наиболее часто используемых цветов с прилавков:
using (var bitmap = new Bitmap(@"..."))
{
var colorsWithCount =
GetPixels(bitmap)
.GroupBy(color => color)
.Select(grp =>
new
{
Color = grp.Key,
Count = grp.Count()
})
.OrderByDescending(x => x.Count)
.Take(5);
foreach (var colorWithCount in colorsWithCount)
{
Console.WriteLine("Color {0}, count: {1}",
colorWithCount.Color, colorWithCount.Count);
}
}
- 1. C++ - 10 самых популярных цветов растрового изображения
- 2. Найдите 5 самых популярных значений mysql
- 3. Выбор 5 самых популярных стран в SQL
- 4. Попытка найти 5 самых популярных записей
- 5. Получить 5 самых популярных значений в mysql с предложением
- 6. Как получить строки из таблицы статей 10 самых популярных тегов?
- 7. Получение текста из самых популярных новостных источников
- 8. Codeigniter извлекает 5 самых популярных строк в столбце
- 9. Список самых популярных телефонов Android?
- 10. Показать 5 самых популярных записей (Crystal Reports для Visual Studio)
- 11. Список 'самых популярных' сообщений (на основе # просмотров)
- 12. Как получить список самых популярных категорий в радиусе?
- 13. Найти популярные N самых популярных элементов
- 14. Как выбрать 10 самых популярных фильмов из базы данных?
- 15. Список самых популярных страниц в SilverStripe сайте
- 16. Как получить список самых популярных курсов в moodle
- 17. SQL - запрос, чтобы найти самых популярных друзей
- 18. Facebook Graph API: получить все сообщения с самых популярных страниц
- 19. Количество самых популярных слов в pandas Dataframe
- 20. просмотр самых популярных страниц на моем сайте
- 21. Как получить названия цветов из его значения rgb
- 22. Как получить исходную матрицу из изображения RGB?
- 23. Как получить код RGB из растрового изображения
- 24. Алгоритм для разработки десятки самых популярных
- 25. URL-схемы для самых популярных мобильных платформ
- 26. Как получить значения RGB изображения?
- 27. MagiC++ RGB значения цветов
- 28. Как получить общий объем продаж из 5 самых продаваемых продуктов?
- 29. Gnuplot гистограмма с RGB цветов из файла
- 30. Проблема с именами цветов RGB
[Что есть вы пытались] (http://whathaveyoutried.com)? Какие подходы вы рассмотрели? Stack Overflow - это не место, где вы будете думать или работать для вас - пожалуйста, покажите нам те усилия, которые вы прошли, и объясните, где вы застряли. – Oded