Как я могу назначить глобальную переменную изнутри функции? Как сбросить закрашенное изображение с помощью CV2?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу назначить глобальную переменную изнутри функции? Как сбросить закрашенное изображение с помощью CV2?

Сообщение Anonymous »

Я работаю над небольшой программой, которая открывает изображение и позволяет пользователю щелкать точки, чтобы рисовать линии.

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

import datetime
import cv2
import numpy

clicked = False

path = "files/file1.png"
coordinates = {'x':[],'y':[]}
def onMouse(event, x, y, flags, param):
global image
global clicked
if event == cv2.EVENT_LBUTTONUP:
coordinates['x'].append(x)
coordinates['y'].append(y)
clicked = True
if (len(coordinates['x'])> 1 ):
print("debug drawing line")
cv2.line(image, (coordinates['x'][-2],coordinates['y'][-2]), (coordinates['x'][-1],coordinates['y'][-1]),(255,0,0),1)

print('debug drawing point')
cv2.circle(image,(coordinates['x'][-1],coordinates['y'][-1]), 3,(255,0,255),3)

def saveImage():
xmin, xmax = min(coordinates['x']),max(coordinates['x'])
ymin, ymax = min(coordinates['y']),max(coordinates['y'])
nombre = datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d-%H-%M-%S')
cv2.imwrite(f'files/Result-{nombre}.png',image[ymin:ymax,xmin:xmax])

image = cv2.imread(path)
cv2.namedWindow("Display", cv2.WINDOW_AUTOSIZE)
cv2.setMouseCallback('Display', onMouse)

active = True
while active:
cv2.imshow('Display', image)
key = cv2.waitKey(1)
if key == ord('q'):
cv2.destroyAllWindows()
active = False
if key == ord('s'):
saveImage()
cv2.destroyAllWindows()
active = False
Программа открывает изображение с помощью cv2. Основной цикл состоит из ожидания ввода пользовательской клавиши: Q для выхода из программы или S для сохранения изображения. Когда пользователь нажимает на точку на изображении, мы рисуем точку на изображении, а после первой точки рисуем линии между точками.
Я пытаюсь добавить кодовый блок для сброса изображения вот так

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

if key == ord('r'):
resetImage()

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

def resetImage():
print('Debug: reset Image')
coordinates['x'].clear()
coordinates['y'].clear()
# image = cv2.imread(path)
# cv2.destroyAllWindows()
Это дает результат, но очевидно, что это не то, что я ищу.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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