Я пытался использовать функции waitKey () или waitKeyEx (), чтобы обнаружить мои клавиши со стрелками, но он не возвращает «-1». Я знаю, что они возвращают разные значения, и я изменил их соответственно.
Я создал программу с множеством привязок клавиш, начиная от «Alt», «Shift», «Spacebar», «Enter», «Escape», обычных букв и цифр и, наконец, левой и стрелка вправо. В основном, когда я запускаю программу с самого начала, она все прекрасно работает, но если я приостановлю ее (при нажатии клавиши некоторое время l oop ничего не делает) и выполню некоторые другие действия в другом окне (например, в браузере), когда я возобновляю работу программы, все клавиши работают должным образом, за исключением клавиш со стрелками влево и вправо.
Кто-нибудь знает, в чем может быть проблема? Только клавиши со стрелками возвращают «-1» ...
РЕДАКТИРОВАТЬ (добавленный пример)
(работает в Ubuntu 18.04.4 LTS)
import numpy as np
import cv2
# generate random video
video = np.zeros((40,512,512))
for idx, aux in enumerate(video):
img_ = np.random.randint(255, size=(512,512))
img = np.asmatrix(img_)
video[idx,::] = img
# continuous time flag
continuous = True
# loop flag
to_do = True
idx = 0
while to_do:
img = np.copy(video[idx, ::].astype('uint8'))
# draw some text
cv2.putText(img,
'Something',
(50, 50),
cv2.FONT_HERSHEY_DUPLEX,
0.5,
(255, 0, 0),
1)
cv2.imshow("Window", img)
# checks if it's by frame or not
if continuous:
idx += 1
else:
idx = idx
# check for key press
k = cv2.waitKeyEx(50)
print(k)
# 'SHIFT' -> by frame/continuos
if k == 65506:
if continuous:
continuous = False
else:
continuous = True
# right arrow key -> next frame
elif k == 65363:
idx += 1
# left arrow key -> previous frame
elif k == 65361:
idx -= 1
# 'Alt' -> Pause
elif k == 65513:
paused = True
while paused:
ka = cv2.waitKeyEx(100)
if ka == 65513:
paused = False
k = None
# '\' -> exit now
elif k == 92:
to_do = False
if idx == len(video):
idx = 0
if idx < 0:
idx = len(video)-1
cv2.destroyAllWindows()