Я загружаю словарь Python несколькими полигонами. Точки многоугольника получаются при щелчке мышью в разных местах изображения. Скрипт отображает изображение для пользователя для выбора различных точек многоугольников. Пользователь щелкнет правой кнопкой мыши в другом положении. Когда пользователь нажимает левую кнопку мыши, создается многоугольник и добавляется в словарь Dict_Polygons с меткой. Список list_of_points очищается, так как новые точки для нового многоугольника будут добавлены в этот список. Проблема в том, что Dict_Polygon не загружается с элементами. Вот полный код.
import math
import pickle
from Tkinter import *
import Image, ImageTk, ImageDraw
import numpy as np
coord=[] # for saving coord of each click position
Dict_Polygon={} # Dictionary for saving polygon
list_of_points=[]
flag=True
label=0
def draw_lines(event):
mouse_xy = (event.x, event.y)
func_Draw_lines(mouse_xy)
def func_Draw_lines(mouse_xy):
func_Draw_Dot(mouse_xy)
center_x, center_y = mouse_xy
if canvas.old_coords:
x1, y1 = canvas.old_coords
canvas.create_line(center_x, center_y, x1, y1)
# add clicked positions to list
if flag==True:
list_of_points.append(mouse_xy)
canvas.old_coords = center_x, center_y
def func_Draw_Dot(coord):
x_coord, y_coord=coord
#draw dot over position which is clicked
x1, y1 = (x_coord - 1), (y_coord - 1)
x2, y2 = (x_coord + 1), (y_coord + 1)
canvas.create_oval(x1, y1, x2, y2, fill='green', outline='green', width=5)
# This function will be called when the user wants to specify class, so a polygon will be drawn.
def func_draw_polygon(event):
numberofPoint=len(list_of_points)
if numberofPoint>2:
print ("test")
canvas.create_polygon(list_of_points, fill='', outline='green', width=2)
Dict_Polygon[label]=list_of_points
list_of_points[:]=[]
# del list_of_points[:] # clear list elements to add new polygon points
canvas.old_coords=None
global label
label=label+1
print (Dict_Polygon.items())
else:
print('Select minemum 3 points')
# Main function
if __name__ == '__main__':
root = Tk()
# Input image
img = Image.open("e.png")
# Draw canvas for iput image to pop up image for clicks
filename = ImageTk.PhotoImage(img)
canvas = Canvas(root,height=img.size[0],width=img.size[0])
canvas.image = filename
canvas.create_image(0,0,anchor='nw',image=filename)
canvas.pack()
canvas.old_coords = None
# bind function to canvas to generate event
canvas.bind("<Button 3>", draw_lines)
canvas.bind("<Button 1>", func_draw_polygon)
root.mainloop()