Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Aleks_Crow, {{TNT}}  
[Emgu CV] Поиск объекта по цвету
Отправлено 28.08.2011 - 18:531
Начальная группа
1798 сообщений
Мужчина


Иногда нужно выделить на изображении объект определённого цвета, для этого подходить RBG фильтр.
Если разбить цветное изображение на несколько каналов и над каждым из них проделать пороговое преобразование, то если применить к получившимся изображениям логическую операцию И, получим черно-белое изображение, где белым цветом будут выделены объекты выбранного цвета. Звучит сложно и не понятно, но на примере всё будет проще и нагляднее.
Цвет, который нужно выделить задается 6-ю параметрами: Rmin, Rmax, Gmin, Gmax, Bmin, Bmax при помощи ползунков (trackBar).
Для того, чтобы удобнее было применять фильтр, напишем отдельный метод:
Code

private Image<Gray, Byte> RGBFilter(Image<Bgr,Byte> input, Gray Rmin, Gray Rmax, Gray Gmin, Gray Gmax, Gray Bmin, Gray Bmax, int dialate)
                           {
                     Image<Gray, Byte> result = new Image<Gray, byte>(input.Width, input.Height);
                     Image<Gray, byte>[] chanels = input.Split();
                     chanels[0] = chanels[0].InRange(Rmin, Rmax);
                     chanels[1] = chanels[1].InRange(Gmin, Gmax);
                     chanels[2] = chanels[2].InRange(Bmin, Bmax);
                     result = chanels[0].And(chanels[1]);
                     result = result.And(chanels[2]);
                     result = result.Dilate(dialate);
                     return result;
                           }

Если передать этому методу исходное цветное изображение, параметры Rmin....Gmax и параметр dialate, который отвечает за степень размытия изображения на выходе, то получим то самое, черно-белое изображение, на котором белым цветом будут выделены объекты заданного цвета.
Давайте попробуем выделить на фото со светофором жёлтый фонарь:

Видите, как здорово? smile
Такой фильтр применен в программе для поиска цветных маяков.

К теме приложен проект этой короткой программы с коментариями. Проект разбит на 2 архива.
Открывать проект при помощи Visual C# Express 2008 или при помощи Visual Studio 2008 Pro, можно открыть и любой другой студией вообщем-то.
Скачать проект.


Профиль Личное сообщение Дом. страница icq Skype
38
  • Страница 1 из 1
  • 1
Поиск: