Перейти к содержимому
Compvision.ru

Nagdiel

Пользователи
  • Количество публикаций

    5
  • Зарегистрирован

  • Посещение

  • Days Won

    1

Nagdiel last won the day on April 12 2015

Nagdiel had the most liked content!

Репутация

2 Новичек

О Nagdiel

  • Звание
    Новичок
  1. Тут может и не все гуру, однако Вы разве на этот форум обратились не для того, чтобы обсудить свои наработки с людьми которые кое-что в этом понимают? Дело в том, что правила транслитерации неоднозначны, поэтому когда объем кода большой могут быть проблемы с поиском нужной функции или переменной. Это во-первых. А во-вторых, любому иностранцу будет проще понять и запомнить что делает функция search, в отличие от функции с названием poisk.
  2. Подойдет функция findContours c параметром CV_RETR_EXTERNAL. В этом случае функция возвращает список внешних контуров. Затем для каждого контура можно получить ограничивающий прямоугольник с помощью функции boundingRect. Про скорость работы при наличии 50 объектов точно не скажу, но по моим ощущениям эта штука работает довольно шустро.
  3. Ок. minVal соответствует значению функции сходства (нормированный квадрат разности) в точке наилучшего совмещения (minLoc). Для начала можно это значение сравнить с порогом: if (minVal < threshold) { cvRectangle(image, cvPoint(minloc.x, minloc.y), cvPoint(minloc.x+templ->width-1, minloc.y+templ->height-1), CV_RGB(255, 0, 0), 1, 8); } Попробуйте подобрать значение порога threshold. Если не выйдет, можно подумать над более сложным критерием. Например, можно анализировать выраженность пика. Т.е. смотреть отношение величины пика к среднему значению функции отклика в его окрестности.
  4. Чтобы перейти на язык С++, неплохо бы Ваш код иметь перед глазами. Ну предположим, что используется функция из OpenCV: matchTemplate( img, templ, result, match_method ); На входе текущее изображение img, и отыскиваемый шаблон templ. Результат - изображение result, каждый пиксель которого представляет собой меру сходства изображения и шаблона в соответствующей позиции с точки зрения выбранного критерия match_method. Чтобы определить точку наилучшего соответствия необходимо в зависимости от выбранного критерия найти глобальный минимум или максимум: double minVal; double maxVal; Point minLoc; Point maxLoc; minMaxLoc( result, &minVal, &maxVal, &minLoc, &maxLoc, Mat() ); Теперь, чтобы понять, есть шаблон на изображении или нет, необходимо проанализировать величину отклика. Т.е. сравнить minVal или maxVal (в зависимости от используемого критерия) с порогом. Если условие не выполняется, то искомого объекта на изображении нет, и рамку для указания его местоположения отрисовывать не следует.
  5. Как вариант, можно смотреть значение функции сходства, которая используется для поиска шаблона, и сравнивать его с порогом. Если значение меньше заданного порога, то объект не найден.
×