Как нарисовать несколько строк на видеокадре, используя python по событиям щелчка мышью - PullRequest
0 голосов
/ 19 марта 2020

У меня есть код, который рисует aws строку на видеокадре, используя opencv python. Но в моем случае на самом деле мне нужно нарисовать 3 линии на одном кадре одну за другой. Что означает рисование одной линии, за которой следует другая. Это код, который у меня есть

import cv2
import numpy as np 

drawing=False # true if mouse is pressed
mode=True # if True, draw rectangle. Press 'm' to toggle to curve

# mouse callback function
class getPoints:
    def __init__(self,frame,points):
        self.frame = frame
        self.points = points

    def interactive_drawing(self,event,x,y,flags,param):
        global ix,iy,drawing, mode
        if event==cv2.EVENT_LBUTTONDOWN:
            self.points.clear()
            drawing=True
            ix,iy=x,y
            print(ix,it)
            self.points.append((x,y))
        elif event==cv2.EVENT_MOUSEMOVE:
            if drawing==True:
                if mode==True:
                    #cv2.circle(self.frame,(x,y),1,(0,0,255),-1)
                    print("move:",x,y)
                    #self.points.append([x,y])
        elif event==cv2.EVENT_LBUTTONUP:
            drawing=False
            if mode==True:
                cv2.circle(self.frame,(x,y),1,(0,0,255),-1)
                self.points.append((x,y))
                #print(self.points)
        return self.points


class ROIselecter:
    def drawROI(self,line1):
        self.line1 =line1
        global cap
        ret, frame = cap.read()
        frame_resized = imutils.resize(frame, width=500)
        self.line1 = []
        gp = getPoints(frame_resized, self.line1)
        cv2.namedWindow('Window')
        cv2.setMouseCallback('Window', gp.interactive_drawing)

        while (1):
            cv2.imshow('Window', frame_resized)
            k = cv2.waitKey(1) & 0xFF
            if k == ord('q'):
                break
        cv2.destroyAllWindows()

У меня есть одна строка, и я выполняю алгоритм, который принимает начальную и конечную точки линии в качестве входных данных и дает результат. Теперь я хочу выполнить тот же алгоритм с тремя строками. Пожалуйста, помогите решить эту проблему !!!

...