Тема: AHK: Определение позиции в контуре
Как определить что точка находится внутри контура? С прямоугольником всё просто, а как быть с другими фигурами?
Win10x64 AhkSpy, Hotkey, ClockGui
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как определить что точка находится внутри контура? С прямоугольником всё просто, а как быть с другими фигурами?
OpenCv pointPolygonTest().
Да не, слишком затратно.
В GDIP есть подобное про Path, там хорошо работало, по памяти говорю.
Gdip_IsVisiblePathPoint
http://www.jose.it-berater.org/gdiplus/ … hpoint.htm
У меня как всегда... Сначала спросил, потом подумал по теме.
Вопрос теперь другой получается при наличии Gdip_IsVisiblePathPoint. Есть например на экране контур какого то цвета, как из него сделать Gdi Path?
Для таких случаев используется opencv.
Чего в нем затратного?
Долго будет.
Надо 10 раз в секунду как минимум, без заметной нагрузки.
А ты проверял?
Есть например на экране контур какого то цвета
Он из точек уникального цвета.
А ты проверял?
А ты?
Именно эту функцию нет.
В целом OpenCv это файлы, и не маленькие, уже это не вариант.
Я им как то баловался, не сказать что моментально работало. Ему же ещё каждый раз надо будет сам контур определять, а потом уже точку, хотя не уверен.
Есть например на экране контур какого то цвета, как из него сделать Gdi Path?
Если забыть про сторонние решения, то каков мог бы быть алгоритм? Интересный вопрос, как по мне.
В целом OpenCv это файлы, и не маленькие, уже это не вариант.
Ну тогда придется разрабатывать собственный алгоритм определения контура со снимка экрана и отрисовывать его в gdi+.
Ему же ещё каждый раз надо будет сам контур определять, а потом уже точку, хотя не уверен.
Если контур не меняется, то не нужно.
Я с помощью opencv делал несколько капча-брейкеров - вроде систему не нагружало.
Если забыть про сторонние решения, то каков мог бы быть алгоритм?
Например:
https://theailearner.com/2019/11/19/suz … cv-python/
Как определить что точка находится внутри контура?
Просто интересно, вопрос про точечные (растровые) рисунки или векторную графику?
serzh82saratov, у opencv открытые исходники, почитай как там определяются контуры и как потом высчитывается положение точки.
На основе opencv кода, напиши собственный код на c++ и потом вызывай его, как машинный код из ahk.
Ну или на stackoverflow можно покопаться, например:
https://stackoverflow.com/questions/217 … on/2922778
Задача в целом не архисложная - все зависит от мотивации.
serzh82saratov пишет:Как определить что точка находится внутри контура?
Просто интересно, вопрос про точечные (растровые) рисунки или векторную графику?
Графика векторная, но иметь с неё можно только скрин, то есть точки.
Malcev
На такие изучения у меня времени куча уйдёт, мотивации не хватит.
Так как в моём случае не предполагается вогнутых контуров, то проще разбить на четыре сектора слева - справа и сверху - снизу, найти крайние бирюзовые пиксели и по строкам искать в этих зонах.
У меня прикладная задача найти все не белые точки вне бирюзового контура.
То есть мы имеем криволинейный контур в виде точечного рисунка и точку. Точка есть обязательно, но она может быть внутри контура, либо снаружи контура. Задача в том, чтобы однозначно сказать, внутри находится точка или снаружи, так?
Мне просто сразу мысль пришла, как если бы я в программе Paint нарисовал некий контур и точку. А потом сделал бы "заливку цветом" рядом с точкой. Если при этом залилось всё вокруг контура, значит точка снаружи. Если же залилось всё внутри контура, значит точка внутри.
Еще как вариант, на kwork.ru найти c++-шника и заказать выполнение данной задачи за 500-1000 рублей.
Пару раз сам так делал.
Поиск через 'ImageSearch' не решит проблему случайно?
Так как важна скорость и нужно перебирать все точки снаружи контура, то нужно через машинный код.
Я вижу это как 2 функции:
Первая возвращает по заданному цвету (либо по каким-то другим признакам) вершины полигона.
Вторая - на входе даем координаты вершин, на выходе получаем массив с точками.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться