import cv2 class DrawLineWidget(object): def __init__(self): self.original_image = cv2.imread('./data/1.jpg') self.clone = self.original_image.copy() self.work = self.original_image.copy() cv2.namedWindow('image') cv2.setMouseCallback('image', self.extract_coordinates) # List to store start/end points self.image_coordinates = [] def extract_coordinates(self, event, x, y, flags, parameters): # Record starting (x,y) coordinates on left mouse button click if event == cv2.EVENT_LBUTTONDOWN: if len(self.image_coordinates) == 0: self.image_coordinates = [(x, y)] elif event == cv2.EVENT_MOUSEMOVE: if len(self.image_coordinates) > 0: self.work = self.clone.copy() # Draw line cv2.line(self.work, self.image_coordinates[0], (x, y), (36, 255, 12), 2) cv2.imshow("image", self.work) # Record ending (x,y) coordinates on left mouse bottom release elif event == cv2.EVENT_LBUTTONUP: self.clone = self.work.copy() self.image_coordinates = [] # Clear drawing boxes on right mouse button click elif event == cv2.EVENT_MBUTTONDOWN: self.work = self.original_image.copy() self.clone = self.original_image.copy() cv2.imshow("image", self.work) def show_image(self): return self.work if __name__ == '__main__': draw_line_widget = DrawLineWidget() while True: cv2.imshow('image', draw_line_widget.show_image()) key = cv2.waitKey(1) # Close program with keyboard 'q' if key == 27: cv2.destroyAllWindows() exit(1)