[Python] How do I reset a painted-over image with CV2?

Discussão em 'Python' iniciado por Stack, Setembro 26, 2024.

  1. Stack

    Stack Membro Participativo

    I'm working on a small program that open an image and lets the user click on points to draw lines.

    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


    The program opens an Image with cv2. The main loop consists of waiting for the user key input, Q to quit the program or S to save the image. When the user clicks on a point on the image, we paint a point on the image, and after the first point, we paint lines between the points.

    I'm trying to add a codeblock to reset the image like this

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


    def resetImage():
    print('Debug: reset Image')
    coordinates['x'].clear()
    coordinates['y'].clear()
    # image = cv2.imread(path)
    # cv2.destroyAllWindows()


    This has a result but obviously it's not what I'm looking for.

    Continue reading...

Compartilhe esta Página