Распознавание цветов EmguCV - PullRequest
1 голос
/ 06 ноября 2011

Я пытаюсь создать программу для обнаружения цветов на кубике Рубика

, это скриншот того, что у меня работает и работает, я в основном использовал код из Edge Detectionпример, который поставляется с emguCV и использует его для обнаружения маленьких кубов (но, как вы можете видеть, некоторые из маленьких кубов не обнаруживаются, но это не та проблема, которую я хочу обсудить здесь).

Теперь, после выясненияГде маленькие кубики, я хочу определить, какого они цвета, в настоящее время я использую значения HSV для определения цвета, например:

if (current_colour.Hue > 120 && current_colour.Hue < 170)
{
     Colours[(int)colornames.W]++;
}
else if (current_colour.Hue > (170))
{
     Colours[(int)colornames.R]++;
}
else if (current_colour.Hue > 5 && current_colour.Hue < 20 )
{
     Colours[(int)colornames.O]++;
}
else if (current_colour.Hue > 47 && current_colour.Hue< 60)
{
     Colours[(int)colornames.G]++;
}
else if (current_colour.Hue > 15 && current_colour.Hue < 30)
{
     Colours[(int)colornames.Y]++;
}
else if (current_colour.Hue > 100 && current_colour.Hue < 110)
{
     Colours[(int)colornames.B]++;
}

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

1 Ответ

3 голосов
/ 06 июня 2013

Если ваше изображение так же просто, как ваш пример, вы можете сделать гистограмму на изображении. Пики на вашей гистограмме будут соответствовать цветам, которые вы используете.

Таким образом, вам нужно составить гистограмму или три, взять самые высокие 10 (или любые другие) значения бина, которые находятся достаточно далеко друг от друга, и там у вас есть ваши цвета.

...