Во-первых, для изображений, на которые нужно нажимать, «png» обычно является более подходящим форматом, чем «jpg». Сжатие, используемое для цветов «jpg», может размыть цвета.
mplcursors
- это небольшой пакет, который поддерживает щелчок (или зависание) на графике. Стандарт отображает всплывающую подсказку с координатами. В вашем приложении показ всплывающей подсказки аннотации кажется полезным. Если нет, вы можете подавить это поведение с помощью sel.annotation.set_visible(False)
и по-прежнему получать событие с координатами.
Координаты бывают двух видов: x
и y
с использованием системы координат осей или индекс (i,j)
для обозначения пикселя. С помощью параметра imshow
extent=
вы можете гибко установить желаемые диапазоны (по умолчанию x
и y
go от 0 до ширины и высоты изображения). x,y
в центре каждого пикселя являются целочисленными значениями. Таким образом, вы можете добавить в свой список индексы (i,j)
или (x,y)
.
Код для эксперимента:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import mplcursors
image = Image.open('points.png')
data = np.array(image)
img = plt.imshow(data)
points = []
cursor = mplcursors.cursor(img, hover=False)
@cursor.connect("add")
def cursor_clicked(sel):
# sel.annotation.set_visible(False)
sel.annotation.set_text(
f'Clicked on\nx: {sel.target[0]:.2f} y: {sel.target[1]:.2f}\nindex: {sel.target.index}')
points.append(sel.target.index)
print("Current list of points:", points)
plt.show()
print("Selected points:", points)