Python OpenCV выбирает рентабельность инвестиций в видео/потоке во время его воспроизведения

#python #opencv

Вопрос:

буду признателен, если кто-нибудь может помочь тайрингу выбрать рентабельность инвестиций в видеопоток во время его воспроизведения (не хочу, чтобы он приостанавливал или захватывал первый кадр) я что-то упустил, я попытался установить для кадров одно и то же имя

 cv2.selectROI('Frame', frame, False)
cv2.imshow('Frame',frame)
 

Спасибо

Ответ №1:

Вы не можете использовать cv2.selectROI() в этом случае, потому что функция блокируется, т. е. она останавливает выполнение вашей программы до тех пор, пока вы не выберете интересующий вас регион (или не отмените его).

Чтобы достичь того, чего вы хотите, вам нужно будет самостоятельно выбрать рентабельность инвестиций. Вот краткий пример того, как вы можете это сделать, используя два щелчка левой кнопкой мыши для определения рентабельности инвестиций и щелчок правой кнопкой мыши, чтобы удалить его.

 import cv2, sys

cap = cv2.VideoCapture(sys.argv[1])
cv2.namedWindow('Frame', cv2.WINDOW_NORMAL)

# Our ROI, defined by two points
p1, p2 = None, None
state = 0

# Called every time a mouse event happen
def on_mouse(event, x, y, flags, userdata):
    global state, p1, p2
    
    # Left click
    if event == cv2.EVENT_LBUTTONUP:
        # Select first point
        if state == 0:
            p1 = (x,y)
            state  = 1
        # Select second point
        elif state == 1:
            p2 = (x,y)
            state  = 1
    # Right click (erase current ROI)
    if event == cv2.EVENT_RBUTTONUP:
        p1, p2 = None, None
        state = 0

# Register the mouse callback
cv2.setMouseCallback('Frame', on_mouse)

while cap.isOpened():
    val, frame = cap.read()
    
    # If a ROI is selected, draw it
    if state > 1:
        cv2.rectangle(frame, p1, p2, (255, 0, 0), 10)
    # Show image
    cv2.imshow('Frame', frame)
    
    # Let OpenCV manage window events
    key = cv2.waitKey(50)
    # If ESCAPE key pressed, stop
    if key == 27:
        cap.release()