Координаты не передаются в основной цикл через функцию mousecallback в python - PullRequest
0 голосов
/ 21 сентября 2018

Я новичок в Python, и я хочу изучать Python.Код (ниже) такой же, как код, который я написал на C ++.Код прекрасно работает в C ++, но в Python это не так.Меня беспокоит то, что когда я удерживаю левую кнопку мыши, на изображении должен появиться круг, но это не так.Любая помощь будет оценена.

код:

import cv2
import numpy as np

class mouse_state:
    def __init__(self):
        self.position = [-1,-1]
        self.left_button_held = False
        self.left_button_clicked = False

    def new_iteration():
        left_button_clicked = False


def mouse_callback(event,x,y,flag,param):
    param = mouse_state()

    if event==cv2.EVENT_LBUTTONDOWN:
        param.position = (x,y)
        param.left_button_held = True
        print('LMB Down @ ',param.position)
    elif event==cv2.EVENT_LBUTTONUP:
        param.position = (x,y)
        param.left_button_held = False
        param.left_button_clicked = True
        print('LMB Up @ ',param.position)
    elif ((flag==cv2.EVENT_FLAG_LBUTTON) & (event==cv2.EVENT_MOUSEMOVE)):
        param.position = (x,y)
        print('LMB Held, Mouse Moved To',param.position)

cap = cv2.VideoCapture(0)
windowName = 'Feed'
cv2.namedWindow(windowName)
ms = mouse_state()
cv2.setMouseCallback(windowName,mouse_callback,ms)

while 1:
    ret, frame = cap.read()
    (height, width) = (frame.shape[0], frame.shape[1])

    if (ms.left_button_clicked==True | ms.left_button_held==True):
        cv2.circle(frame,ms.position,3,(0,0,255))
        cv2.circle(frame,ms.position,10,(255,0,0),2)
        print('Current Position ',ms.position)

    ms.new_iteration

    cv2.imshow(windowName,frame)
    w = cv2.waitKey(1) & 0xFF
    if w == ord('q'):
        break

cv2.destroyAllWindows()
...