Процесс выглядит следующим образом:
- создать новое окно
- прикрепить mouseCallback
- нарисовать кадры в этом окне
- при нажатии в окне вызывается функция draw_circle
- для обработки фрейма используйте переменную фрейма
- чтобы увидеть изменения, перерисовать фрейм
MouseCallback необходимо подключить только один раз.
Примечание: print (mouse)
в вашем коденикогда не достигнуто из-за цикла while
.
Я изменил ваш код, чтобы он работал.Я только оставил комментарии, где я изменил код.
import cv2, numpy as np
mouse = []
def draw_circle(event,x,y,flags,param):
global ix,iy
if event == cv2.EVENT_LBUTTONDBLCLK:
# draw dot where double clicked
cv2.circle(frame,(x,y),5,(0,0,255),-1)
ix,iy = x,y
mouse.append([x,y])
# redraw frame to screen - with circle
cv2.imshow("Video",frame)
# print coordinates
print (mouse)
waitKey = 0
# open a window named 'video'
cv2.namedWindow("Video")
# attach mouseCallback to the window named 'video'
cv2.setMouseCallback("Video",draw_circle)
cap = cv2.VideoCapture("L2_clip2_16s.m4v")
while(True):
ret, frame = cap.read()
if ret:
# draw the frame in the window named 'Video'
cv2.imshow("Video",frame)
key = cv2.waitKey(waitKey)
if key == ord("c"):
waitKey = 1
elif key== ord('q'):
break
else:
break
cv2.destroyAllWindows()