OpenCV поиск фрагмента картинки по шаблону (template)

Компьютерное зрение, OpenCV

OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение Tlya » 17 апр 2017, 00:00

Здравствуйте!
такой вопрос: создал прилагу по поиску фрагмента на картинке по шаблону
С большего все работает норм, интересует два вопроса:
1. как сделать так чтобы находило более одного совпадения? (вроде как есть какой-то способ "скользящего окна", но хотелось бы знать как его реализовать. а может и не им надо пользоваться)
2. как сделать чтобы в случае отсутствия совпадения не показывал ни одной рамки (сейчас прога ищет совпадения, но даже если адекватных нет выдает хоть какой-то результат (неверный))

Код: Выделить всё
#define  CV_TM_SQDIFF        0

#include<opencv2\highgui\highgui.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\opencv.hpp>
#include<opencv\cv.h>
#include<stdio.h>

using namespace cv;
using namespace std;

int main(int argc, const char** argv)
{
   setlocale(LC_ALL, "Russian");
   IplImage* image = 0;
   IplImage* templ = 0;

   char* filename = "TEST.jpg";
   char* filename0 = "X.jpg";
   // загрузка изображения
   image = cvLoadImage(filename, 1);
   // загрузка шаблона
   templ = cvLoadImage(filename0, 1);

   // размер шаблона
   int width = templ->width;
   int height = templ->height;

   IplImage *res = cvCreateImage(cvSize((image->width - templ->width + 1), (image->height - templ->height + 1)), IPL_DEPTH_32F, 1);

   // сравнение изображения с шаблоном
   cvMatchTemplate(image, templ, res, CV_TM_SQDIFF);
   // покажем что получили
   cvShowImage("res", res);

   double minval, maxval, threshold = 0.5;
   CvPoint    minloc, maxloc;
   cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0);

   // нормализуем
   cvNormalize(res, res, 1, 0, CV_MINMAX);
   cvShowImage("res norm", res);

   // выделим область прямоугольником
   if (minval < threshold) {
      cvRectangle(image, cvPoint(minloc.x, minloc.y), cvPoint(minloc.x + templ->width - 1, minloc.y + templ->height - 1), CV_RGB(0, 0, 255), 2, 8);
   }
   // показываем изображение
   cvShowImage("Match", image);
   cvWaitKey(0);
   return 0;
}

Сделал как говорилось в другой теме (viewtopic.php?f=7&t=907), но ниче не получилось :ny_tik:
Tlya
 
Сообщения: 6
Зарегистрирован: 15 апр 2017, 23:35
programming: C#

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение noonv » 17 апр 2017, 13:42

А что не получилось с отбрасыванием вариантов по заданному пороговому значению?
Аватара пользователя
noonv
Администратор
 
Сообщения: 540
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение Tlya » 19 апр 2017, 16:23

Какой порог не поставлю не обводит рамкой. Хотя "res" отображает белый пиксель на черном фоне (местоположение).
п.с. В каком вобще диапазоне порог должен быть?
Tlya
 
Сообщения: 6
Зарегистрирован: 15 апр 2017, 23:35
programming: C#

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение noonv » 19 апр 2017, 16:32

Это зависит от картинки и шаблона.
Значение можно узнать при помощи той же функции minMaxLoc()
Аватара пользователя
noonv
Администратор
 
Сообщения: 540
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение Tlya » 20 апр 2017, 18:29

https://vk.com/photo15148812_456239115
Вот что получается... что делать?
Tlya
 
Сообщения: 6
Зарегистрирован: 15 апр 2017, 23:35
programming: C#

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение noonv » 22 апр 2017, 09:57

Точка с максимальным откликом есть. Что не так?
Аватара пользователя
noonv
Администратор
 
Сообщения: 540
Зарегистрирован: 05 май 2011, 15:44
Откуда: Калининград
programming: С++

Re: OpenCV поиск фрагмента картинки по шаблону (template)

Сообщение Tlya » 22 апр 2017, 14:04

Сам бы хотел знать, уже который день голову ломаю...
Tlya
 
Сообщения: 6
Зарегистрирован: 15 апр 2017, 23:35
programming: C#


Вернуться в Компьютерное зрение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

© 2009-2017 |  О проекте  |  Политика Конфиденциальности  |