-
Количество публикаций
10 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем lngvar
-
-
Ну смотри, если есть время обсудить это... На самом деле это не фотографии.
Это экран в Д3Д. Есть спрайтовые фигуры, текст. Все это заключено в небольшие прямоугольники и сохранены в bmp.
Если бы не размытость и сглаживание, можно было бы обычной логикой сравнивать. Поэтому нужна небольшая вариативность.
Я подбираю минимальный параметр разброса оттенков и первое удачное попадание - это и есть искомый вариант.
Уже нашел и подключил imagesearchdll.dll работающий по такому принципу, но иногда попадаются задачи которые ему не по зубам.
Вот и я просил помощи, что если бы opencv мог решать эффективно такие простые примитивы. Теперь мне придется пользоваться двумя инструментами, разделяя задачи на скорость и качество.
-
это очень печально, были большие надежды на opencv
А то на всех форумах на вопросы про быстрый поиск все умно кивают в сторону opencv, хотя не имеют не малейшего представления о нем.
Теперь по крайней мере я знаю что это качественный поиск, но не быстрый.
-
окей. Две картинки
20х20
следующим кодом ищу второе на первом.
#include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> #include "time.h" IplImage* image = 0; IplImage* templ = 0; int _tmain(int argc, _TCHAR* argv[]) { char* filename = "c:/dir/all.jpg"; image = cvLoadImage(filename,1); char* filename2 = "c:/dir/need.jpg"; templ = cvLoadImage(filename2,1); IplImage *res = cvCreateImage( cvSize( (image->width-templ->width+1), (image->height-templ->height+1)), IPL_DEPTH_32F, 1 ); double minval, maxval; CvPoint minloc, maxloc; // ------------------------------------------------------------------------------------------------------ clock_t t=clock(); for(int z=1;z<=100;z++) { cvMatchTemplate(image, templ, res, CV_TM_SQDIFF); } t=clock()-t; t=(double)t/CLOCKS_PER_SEC;//t время в секундах ) std::cout<<t<<" sec"<<std::endl; // -------------------------------------------------------------------------------------------------------- cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0); 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); cvShowImage("Match", image); cvWaitKey(0); cvReleaseImage( &image ); cvReleaseImage( &templ ); cvReleaseImage( &res ); cvDestroyAllWindows(); return 0; }
Пожалуйста, пните меня туда где это можно ускорить или скажите что быстрее невозможно.
Потому что на моем core i5 это занимает неприличные 35 секунды за 100 итераций. ( загрузка проца 24% )
350 мс на подготовленный поиск и это без учета cvMinMaxLoc это очень долго.
Может есть вариант это сделать какой то другой библиотекой ?
-
Есть какие то примеры для подобного ? Может кто-то навскидку привести ?
-
и это в контексте поиска картинки на экране ?
Ваш способ по-моему подходит просто для сравнения двух картинок, а не поиска.
-
38 минут назад, iskees сказал:Все три примера довольно тривиальны, по времени обработки на нормальном железе (в смысле не четвертый пентиум, а что то помоложе) и с таким размером файла 5мс максимум. Это средствами opencv.
Но я бы сперва попробовал tesseract.
опять я неточно пояснил свою потребность.
Мне не надо ничего распознавать, мне надо найти заранее заготовленные картинки, и получить x,y их на экране.
а tesseract, как я понял, это OCR , идет работа по распознанию, поправьте меня если ошибаюсь.
Тем более что текст я привел для наглядности, сложного и простого случая. А еще у меня заготовленны картинки 10х10 точек.
немогли бы вы указать метод, при котором я бы мог найти третий вариант, с приемлемой скоростью.
И максимально быстрый для первого варианта.
Я почитал какие вы задачи решаете тут на форуме, и мне очень неудобно задавать такие нубские вопросы.
Просто мне на данный момент нет возможности углубляться в opencv, но проект мой остановился на перепутье -
смогу ли я найти способ на с++ найти достойную замену imagesearch или нет.
p.s но тессеракт конечно заинтриговал, как вариант получения незапланированного текста на экране .
p.s Фактически я хочу завернуть метод opencv по поиску картинки в виде ...
imgsearch ( int &x, int &y, int x1, int y1,int x2, int y2, int variation, char* namefile)
для совместимости.
-
Давайте я попробую яснее определить свои потребности и свои трудности в распознавании.
Только заранее прошу извинить за мою шкалу легко-трудно.
Все 3 картинки это сильно увеличенный шрифт.
1. Вот это элементарный фрагмент, который autohotkey находит за 15-20 мс.
____________________________
2.Этот фрагмент мне крайне сложно находить находить с помощью автохоткея, так как там постоянно разные шумы вокруг букв.
Но я уверен что средствами opencv это легко будет сделать. И я думаю я справлюсь сам.
____________________________
3. Третий фрагмент имеет более или менее выраженные и постоянные шумы, которые при определенной вариативности оттенков поиска позволяет его
довольно точно и быстро находить. Время поиска примерно 30-50 мс в зависимости от указанной вариативности оттенков. ( опять же в автохоткее)
__________________________
Вот я прошу подсказать, первый и третий вариант есть возможность реализовать средствами opencv с сопоставимой скоростью ?
Или я пытаюсь высаживать семена цветов с помощью бульдозера и opencv это слишком тяжелый инструмент для подобных примитивных задач ?
Извиняюсь за логотип клиптунета. Конечно же в настоящих файлах он не присутствует
-
я видел подобное, но там идет довольно серьезное распознавание.
А мне нужен всего лишь поиск картинки с небольшой вариативностью в оттенках . С ответом да\нет.
Без поиска наиболее подходящего, потому что все упирается в скорость исполнения.
Может у opencv нет ответа на такие примитивы ?
-
Заранее прошу прощения за такой простой вопрос.
Перевожу на visual c++ 2010 свой проект с AHK.
Уперся в проблему поиска картинки на экране.
В AHK есть элементарная функция imagesearch которая возвращает x,y первого нахождения заданного шаблона и позволяет задать вариативность.
Крайне важна скорость поиска.
Можете подсказать как на opencv сделать подобное, без излишних затрат процессорного времени ?
Поиск без масштабирования, без вращения, разве что очень небольшая вариативность оттенков цвета.
Шаблоны - прямоугольники 10-50 пикселей по сторонам максимум.
Выборка со всего экрана или с его части .
Все что я пробовал - это слишком сложно и , как бы , напыщенно. Находит совершенно излишние совпадения, делает целые массивы совпадений сомнительного качества поиска.
А простого поиска к сожалению найти не смог.
Минимальный проект поиска по шаблону
в OpenCV
Опубликовано · Report reply
написал красиво, надо углубляться.
Я думал что есть готовые решения в таком объемном продукте, а все 6 стандартных методов поиска не подходят при своем сложности.