Я думаю, cv2.waitKey
не может отловить несколько нажатий одновременно. Простой способ поймать комбинацию из двух клавиш, вы можете записать последний пойманный ключ и сравнить его с текущим ключом перехвата, проверить, соответствуют ли эти два ключа желаемой комбинации клавиш.
import cv2
cap = cv2.VideoCapture(0)
k = last_key = -1
up_left_is_pressed = up_right_is_pressed = False
while True:
ok, image = cap.read()
if not ok:
break
last_key = k # last catched key
k = cv2.waitKey(1) # current catched key
if k == -1:
up_left_is_pressed = up_right_is_pressed = False
if (k == ord('a') and last_key == ord('w')) or ((k == ord('w') and last_key == ord('a'))):
up_left_is_pressed = True
cv2.putText(image, "up left press", (25, 25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
elif (k == ord('d') and last_key == ord('w')) or ((k == ord('w') and last_key == ord('d'))):
up_right_is_pressed = True
cv2.putText(image, "up right press", (25, 25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
else:
cv2.putText(image, "no key combination pressed", (25, 25), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0))
cv2.imshow("hi", image)
if k == 27:
break
cap.release()
cv2.destroyAllWindows()