Я пытаюсь создать ограничивающую рамку для изображений. Я хочу, чтобы инструмент сначала позволил мне нарисовать ограничивающий прямоугольник с помощью прямоугольного селектора, а затем после настройки ограничивающего прямоугольника. Если я нажму 'w', я хочу, чтобы координаты моей ограничительной рамки были сохранены в списке Python. Это мой код:
def line_select_callback(clk, rls):
global tl_list
global br_list
global object_list
global class_list
plt.connect('key_press_event', set_class)
tx = int(clk.xdata)
ty = int(clk.ydata)
bx = int(rls.xdata)
by = int(rls.ydata)
plt.connect('key_press_event', lambda event: set_final(event, tx, ty, bx, by))
def toggle_selector(event):
toggle_selector.RS.set_active(True)
def set_class(event):
global clas
if event.key == '1':
clas = '0'
print('class set to 0')
elif event.key == '2':
print('class set to 1')
clas = '1'
def set_final(event, tx, ty, bx, by):
global object_list
global class_list
if event.key == 'w':
tl_list.append((tx, ty))
br_list.append((bx, by))
class_list.append(clas)
if __name__ == '__main__':
print('Default class set to 0')
for n, image_file in enumerate(os.scandir(image_folder)):
img = image_file
fig, ax = plt.subplots(1)
image = cv2.imread(image_file.path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
ax.imshow(image)
toggle_selector.RS = RectangleSelector(ax, line_select_callback,
drawtype='box', useblit=False,
button=[1], minspanx=5, minspany=5,
spancoords='pixels', interactive=True )
bbox = plt.connect('key_press_event', toggle_selector)
key = plt.connect('key_press_event', onkeypress)
plt.show()
Проблема в том. Когда я сохраняю новые ограничивающие рамки, старые ящики также сохраняются. Допустим, я рисую 3 прямоугольника на изображении. Сохраненные координаты выглядят следующим образом:
{296,181,417,373,0} {235,178,447,370,0} {296,181,417,373,0} {235,178,447,370,0} {77,125,207,319,0} {296,181,417,373,0}
Первый ящик сохраняется 3 раза, второй ящик 2 раза и последний ящик 1 раз. Как это решить?