Найти координаты метки на картинке

нужно разработать программу (предположительно, но не
обязательно, на языке Python), которая загрузит это изображение, найдет цветовой маркер, если он там
есть, и вернет координаты соответствующих пикселей на картинке (в выходной поток, в формате X, Y).
Задача перевода координат из пиксельной позиции на картинке в географические координаты не
ставится. Программа разрабатывается на онлайн-платформе REPL.IT.
На вход программы подается изображение в формате *.png, представляющее из себя карту
Мунной поверхности. На карте может находится цветовая метка следующего вида (один
зеленый пиксель в центре и 9 желтых точек по краям).
Метка видна только на отсканированном участке изображения, то есть она может оказаться частично
или полностью скрыта. Программа должна вывести координаты зеленой точки, если таковая на
изображении имеется, или же координаты любой из желтых точек, если виден только желтый край
метки. Если нет ни желтых, ни зеленых пикселей, программа должна вывести сообщение об отсутствии
меток на изображении, например «Метка не найдена».
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Найти красный ромб на картинке и определить его координаты
"Найти красный ромб на картинке и определить его координаты" — дублирую на случай переименования.
Найти координаты элемента на экране (поиск картинки на картинке)
Есть две картинки Первая допустим — красный квадрат А вторая — скриншот экрана, на котором где то.
Координаты метки из GeoObjectCollection
Есть коллекция объектов, выводятся ну карту. Есть событие на клик метки. Как определить координаты.
Метки и координаты на топосъемке
Какая программа лучше всего подойдет для работы с проектированием ВОЛС, то есть работа с метками и.
Вытащить координаты созданной метки из функции
Добрый день, столкнулся с проблемой, не могу вытащить координаты метки из функции поиска адреса.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Убрать координаты клика по картинке
Приветствую. Использую форму, в которой вместо кнопки Submit ставлю картинку: <input type=’image’.
Определить координаты объекта на картинке
Всем добрый день. Есть задача такого плана: У меня есть план этажа в картинке, на этом плане в.
Получить точные координаты позиции на картинке
Всем привет, опишу в целом для начала задачу, чтобы понимать что я хочу получить в итоге, есть.
Как привязать цветовые координаты (rgb и hsl) к картинке
Подскажите пожалуйста. Как привязать цветовые координаты (rgb и hsl) к картинке в c++.
Как получить локальные координаты мыши при клике на картинке
Здравствуйте! На листе Excel есть несколько картинок. К ним привязаны макросы. Для моей задачи.
Узнать цвет и координаты пикселя на картинке. Обработка и извлечение информации из BMP файла
Загружается изображение формата BMP. Программа должна описать для каждого пикселя изображения.
Или воспользуйтесь поиском по форуму:
Соедините новую точку с предыдущей точкой на изображении прямой линией в OpenCV-Python.
Возможно, нам придется рисовать линии на изображении для различных целей, таких как рисование, рисование, отслеживание движения точки и т. д. поэтому необходимо знать, как соединить две точки при обработке изображения.
OpenCV — это библиотека функций программирования, в первую очередь для компьютерного зрения в реальном времени. Библиотека является кроссплатформенной и лицензируется как бесплатное программное обеспечение с открытым исходным кодом по лицензии Apache.
В этой статье мы узнаем, как можно соединить новую точку с предыдущей точкой на изображении прямой линией с помощью OpenCV-Python.
Соединение одной точки с предыдущей
Наша задача — соединить текущую координатную позицию на изображении, по которому осуществляется щелчок мышью, с предыдущей точкой.
Прежде чем приступить к соединению точек, мы должны знать, как мы будем это делать. Изображение состоит из множества пикселей, которые могут быть заданы координатами. Мы можем выбрать любые две точки на этом изображении, и они обе будут иметь некоторые координаты. Соединив эти две точки, мы можем легко нарисовать линию. Но нам нужно иметь при себе эти координаты.
Чтобы нарисовать прямую линию между двумя точками на изображении, мы можем использовать OpenCV cv2.line(). Синтаксис этого метода:
cv2.line(img, pt1, pt2, color, thickness)
Чтобы рисовать линии между каждым щелчком мыши, вам необходимо выполнить шаги, приведенные ниже:
Шаг 1. Импорт необходимых библиотек
Первым шагом является импорт необходимых библиотек. Чтобы открывать, читать и манипулировать изображениями, мы будем использовать библиотеку Open CV.
import cv2 import numpy as np
Шаг 2: Чтение изображения
Мы можем использовать функцию cv2.imread() для чтения изображения из файла. В следующем фрагменте мы прочитали изображение из файла и отобразили его с помощью функции cv2.imshow.
# Read the image img = cv2.imread('image.jpg') # Display the image cv2.imshow('Image', img) cv2.waitKey(0)
Шаг 3. Объявление списка, содержащего все точки
Чтобы отслеживать все посещенные точки, мы создадим список, в который добавим все точки на изображениях, где мы щелкнули мышью.
Point = []
Шаг 4. Определение события щелчка мыши
Следующий шаг — определить действие, которое нам нужно выполнять при каждом щелчке мыши в любом месте экрана.
- Сначала мы добавим координаты точки, по которой мы щелкнули, в список точек.
- Затем мы создадим небольшую точку, чтобы показать точку, где мы щелкнули изображение.
- Если мы щелкнем изображение в первый раз, нет необходимости рисовать линию.
- Но после этого нам нужно провести линию между двумя последними точками в списке точек. Затем мы покажем новое изображение.
- Мы добавим эту функцию в качестве обратного вызова к событиям мыши.
В следующем фрагменте функция cv2.setMouseCallback фиксирует события мыши, а затем добавляет позицию щелчка мыши при нажатии левой кнопки мыши и сохраняет координаты новой точки в списке точек. Затем последние 2 точки, доступные в списке точек, соединяются прямой линией.
Здесь мы использовали функцию cv2.line(), чтобы нарисовать линию между предыдущей точкой и новой точкой. Функция принимает на вход координаты двух точек, а также цвет и толщину линии. Затем мы отобразили изображение с линией, используя функцию cv2.imshow.
# Define a callback function to capture mouse events def mouse_callback(event, x, y, flags, param): if event == cv2.EVENT_LBUTTONDOWN: points.append((x,y)) cv2.circle(img,(x,y), 1, (100, 100, 100), -1) if len(points) >= 2: cv2.line(img, points[-1], points[-2], (0, 0, 10), 2) cv2.imshow('image', img) # Set the callback function for mouse events cv2.setMouseCallback('Image', mouse_callback) # Wait for the user to click on the image cv2.waitKey(0)
Шаг 6: Закрытие всех окон
Наконец, нам нужно уничтожить все окна с помощью функции DestroyAllWindows():
Cv2.destroyAllWindows()
Пример
Вот полный код для соединения новой точки с предыдущей точкой на изображении прямой линией с использованием OpenCV-Python —
import cv2 import numpy as np img = cv2.imread('image5.jpg') cv2.imshow('image',img) points = [] def click_event(event, x, y, flags, params): if event == cv2.EVENT_LBUTTONDOWN: points.append((x,y)) cv2.circle(img,(x,y), 1, (100, 100, 100), -1) if len(points) >= 2: cv2.line(img, points[-1], points[-2], (0, 0, 10), 2) cv2.imshow('image', img) cv2.setMouseCallback('image', click_event) cv2.waitKey(0) cv2.destroyAllWindows()
Выход

Заключение
В этой статье мы увидели, как мы можем соединить новую точку с предыдущей точкой на изображении прямой линией, используя библиотеку OpenCV языка Python. Мы прошли все шаги, необходимые для чтения изображения, определив предыдущую и новую точку, а затем соединив точки прямой линией. Мы узнали о библиотеке Python Opencv и ее приложениях для обработки изображений.
Все права защищены. © Linux-Console.net • 2019-2024
Python + cv как получить координаты найденного посредством matchTemplate объекта?
Суть такова. Делаю бота для игры, принцип работы:
1. Делает скриншот игры #реализовано
2. Ищет на скриншоте объект, в моём случае ману #реализовано
3. Возращает координаты схожа объекта #сам вопрос
4. Затем кликает на эти координаты #знаю как реализовать
Может быть есть способ получше реализовать это? За помощь готов скинуть денюжку!
from PIL import ImageGrab import os import time import cv2 import numpy as np def find_mana(): img = cv2.imread("screenshot.png") #картинка, на которой ищем объект gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #преобразуем её в серуюш template = cv2.imread("mana.png", cv2.IMREAD_GRAYSCALE) #объект, который преобразуем в серый, и ищем его на gray_img w, h = template.shape[::-1] #инвертируем из (y,x) в (x,y) result = cv2.matchTemplate(gray_img, template, cv2.TM_CCOEFF_NORMED) loc = np.where(result >= 0.5) #рисует прямоугольник вокруг объекта for pt in zip(*loc[::-1]): cv2.rectangle(img, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 3) cv2.imshow("img", img) #выводит на экран результат def main(): #делает скриншот игры, закоментируйте, если понадобится, так как скриншот я выложил снизу, как и сам объект gameWindow = (0, 31, 1280, 747) im = ImageGrab.grab(gameWindow) output = im.save(os.getcwd() + '\\screenshot' + '.png', 'PNG') print('\nСкриншот сделан и сохранён\n') find_mana() if __name__ == '__main__': main()
- Вопрос задан более трёх лет назад
- 4658 просмотров
Комментировать
Решения вопроса 1
Анатолий @trofimovdev
Вы же рисуете прямоугольник вокруг объекта, так возьмите оттуда координаты.
pt — левый верхний угол, (pt[0] + w, pt[1] + h) — правый нижний.
Получается, что середина объекта будет рассчитываться по формулам (сам бы подставил, но без видимого массива тяжеловато, да и вечно эти X и Y местами путаю):
Для X:
(X координата нижнего угла - X координата верхнего угла) / 2
(Y координата нижнего угла - Y координата верхнего угла) / 2
Ответ написан более трёх лет назад
Нравится 1 2 комментария
golub4ik @golub4ik Автор вопроса
Уже сам сообразил, но спасибо <3
sovsemnevajno @sovsemnevajno
golub4ik, а код можно?
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- Python
- +2 ещё
Как сделать такой функционал кнопок Telebot python?
- 1 подписчик
- час назад
- 22 просмотра
Точки на координатной плоскости — Python: Абстракция с помощью данных
Одна из самых удобных тем для тренировки навыков моделирования — геометрия. Она визуально представима и интуитивно понятна для всех. В этом уроке мы научимся моделировать конкретную предметную область с ее помощью.
Моделируем предметную область
Координатная плоскость — плоскость, на которой задана система координат. Координаты задаются на двух пересекающихся под прямым углом прямых x и y . Они называются числовыми осями. Речь идет о декартовой системе координат:
Мы расположили на плоскости точку. Ее положение определяется двумя координатами. В математике она записывается так: (2, 3) , где первое число — координата по оси x , а второе — по оси y . В коде ее можно представить как кортеж, который состоит из двух элементов:
# x = 2, y = 3 point = (2, 3) # или же point = 2, 3
Этого уже достаточно, чтобы выполнять различные операции. Например, искать симметричную точку относительно оси x . Для этого нужно инвертировать второе число — поменять знак на противоположный:
Так это выглядит в коде:
# x = 2, y = 3 point = 2, 3 x, y = point # x = 2, y = -3 symmetrical_point = x, -y
Иногда нужно найти точку, которая находится между двумя другими точками посередине. В этом случае говорят, что нужно найти середину отрезка.
Такая точка вычисляется через поиск среднего арифметического каждой из координат. То есть координата x «срединной» точки равна (x1 + x2) / 2 , а координата y — (y1 + y2) / 2 :
def get_middle_point(p1, p2): x1, y1 = p1 x2, y2 = p2 x = (x1 + x2) / 2 y = (y1 + y2) / 2 return x, y point1 = 2, 3 point2 = -4, 1 get_middle_point(point1, point2) # (-1, 2)
Подобных операций в геометрии очень много. Все функции в коде, которые связаны с работой точек, логично поместить в модуль points .
Когда точки объединяются, образуются отрезки. Каждый отрезок задается парой точек — противоположных концов отрезка. В коде отрезок можно представить аналогично точке в виде кортежа из двух элементов:
point1 = 3, 4
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: