Я немного изменил ваш код, поскольку у меня нет информации о предмете, должности и т. Д. c.
В любом случае, вот окончательная версия, которая работает так, как вы хотели:
import cv2
video_capture = cv2.VideoCapture(0)
status = 1
# mouse callback function
def mouse_func(event,x,y,flags,param):
global status
if event == cv2.EVENT_LBUTTONDOWN:
cv2.imwrite('save.png',frame)
details='details'
with open('./details.txt', 'a') as f:
f.write(details)
print("Image taken succesfully")
elif event == cv2.EVENT_RBUTTONDOWN:
status = 0
print("Closing application")
cv2.namedWindow('Video')
cv2.setMouseCallback('Video',mouse_func)
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
pressedKey = cv2.waitKey(1) & 0xFF
#take picture
if pressedKey == ord('c'):
cv2.imwrite('save.png',frame)
details='details'
with open('./details.txt', 'a') as f:
f.write(details)
print("Image taken succesfully")
#quit
elif pressedKey== ord('q') or status == 0:
print("Closing application")
break
cv2.imshow('Video', frame)
print("Application Closed")
cv2.destroyAllWindows()
Вы должны создать функцию обратного вызова (mouse_func
), затем вы должны проверить правый и левый щелчок, используя EVENT_LBUTTONDOWN
и EVENT_RBUTTONDOWN
.
Обратите внимание, что существует глобальная переменная status
, которая устанавливается в 0
, если происходит щелчок правой кнопкой мыши. Затем в главном l oop мы проверяем, является ли нажатая клавиша q
ИЛИ, если status
установлено на 0
.