Преобразование нарисованных пользователем многоугольников на карте карты в бинарную маску в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование нарисованных пользователем многоугольников на карте карты в бинарную маску в Python?

Сообщение Anonymous »

Я пытаюсь создать программу, используя tkinter , cartopy и matplotlib , которая позволила бы пользователям рисовать полигоны на карте. Как только многоугольник закрыт (щелчок правой кнопкой мыши), я хочу преобразовать ее в маску, где пиксели внутри многоугольника устанавливаются на 1, а пиксели снаружи установлены на 0. Мне нужны эти маски, чтобы позже применить данные, смоделированные по Гренландии.

Код: Выделить всё

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import tkinter as tk

def on_click(event):
global polygon_closed, pointsX, pointsY

if event.button == 1 and not polygon_closed:
if len(pointsX) > 0:
ax.plot([pointsX[-1], event.xdata], [pointsY[-1], event.ydata], 'r-')

pointsX.append(event.xdata)
pointsY.append(event.ydata)
ax.plot(event.xdata, event.ydata, 'r+')
canvas.draw()

elif event.button == 3 and not polygon_closed:
ax.plot([pointsX[0], pointsX[-1]], [pointsY[0], pointsY[-1]], 'r-')
maskedZone = list(zip(pointsX, pointsY))
polygon = Polygon(maskedZone, closed=True, facecolor='red', edgecolor='black', alpha=0.5)
ax.add_patch(polygon)
canvas.draw()
polygon_closed = True
print(maskedZone)

root = tk.Tk()
root.title("Mask drawing")
root.geometry("500x700")

projection = ccrs.Stereographic(central_latitude=70, central_longitude=-42)
fig, ax = plt.subplots(facecolor="w", subplot_kw=dict(projection=projection))

ax.set_extent([-65, -25, 59, 85], crs=ccrs.PlateCarree())
ax.coastlines()
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.gridlines(draw_labels=True)

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
canvas.mpl_connect("button_press_event", on_click)

pointsX = []
pointsY = []
polygon_closed = False

root.mainloop()
< /code>
И вот пример вывода после закрытия многоугольника: < /p>
[(np.float64(38555.16314861295), np.float64(645247.4786037477)),
(np.float64(-126380.37478850619), np.float64(221127.52390829823)),
(np.float64(374316.793949177), np.float64(256470.85346625233))]
Я попытался создать shapely.polygon , а затем с использованием rasterio.features.rasterize для преобразования в маску, но растер в конечном итоге был полон всего 0 , даже если есть форма для растешиния. (Возможно, выход 10x10 слишком мал, поэтому он не «просматривать» форму) < /p>

Код: Выделить всё

import shapely
import rasterio.features

maskedZone = list(zip(pointsX, pointsY))
maskPolygon = shapely.Polygon(maskedZone)
raster = rasterio.features.rasterize([(maskPolygon, 1)], out_shape=(10, 10), all_touched=True)
< /code>
 Вопрос: < /strong>
Как я могу преобразовать нарисованный многоугольник в двухмерную двоичную маску? Я хотел бы определить обычную сетку в той же степени, что и карта, и для каждой точки сетки назначьте: < /p>

 1 Если точка находится внутри многоугольника < /li>
 0, если она выходит за пределы < /li>
< /ul>
Я не уверен, как справиться с надписью. Я читаю, что люди используют rasterio 
, но я не уверен, как правильно интегрировать прогнозы.
Любая помощь или направление будут оценены.>

Подробнее здесь: https://stackoverflow.com/questions/795 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Преобразование нарисованных пользователем многоугольников на карте карты в бинарную маску в Python?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Преобразование нарисованных пользователем многоугольников на карте карты в бинарную маску в Python?
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Формированный многоугольник в бинарную маску
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Как создать бинарную маску из результата сегментации YOLO8
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Найдите кусочную линию через бинарную маску толстой линии
    Anonymous » » в форуме Python
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»