Как определить, когда ключ выпущен в OpenCV? - PullRequest
0 голосов
/ 27 января 2020

Если я запускаю следующий код

import cv2

cv2.namedWindow('Window')
while True:
    key = cv2.waitKey(50)
    print(key)
    if key == ord('q'):
        break
print('quit')

и некоторое время нажимаю i (код клавиши 105), я получаю вывод

-1
-1
-1
-1
-1
-1
105
-1
-1
-1
-1
-1
-1
-1
-1
-1
105
105
105
105
105
105
105
105
105
105
-1
-1

Первое вхождение 105 - это время, когда я нажал i вниз. Несмотря на то, что я нажимаю i, я получаю -1 девять раз подряд. Затем я постоянно получаю 105, пока не отпущу i.

Как я узнаю после первого появления 105, если i все еще нажата или была отпущена, когда я получаю -1 в обоих случаях? Или, другими словами, как вы узнаете, когда ключ отпущен в OpenCV?

1 Ответ

0 голосов
/ 27 января 2020

OpenCV имеет очень базовые c свойства для интерфейса. Как упоминалось в документации , она не говорит об освобожденных событиях:

Функция waitKey ждет события клавиши бесконечно (когда ?????≤0) или задержки миллисекунд, когда она положительны. Поскольку операционная система имеет минимальное время между переключениями потоков, функция не будет ожидать точную задержку мс, она будет ожидать как минимум задержку мс, в зависимости от того, что еще работает на вашем компьютере в это время. Возвращает код нажатой клавиши или -1, если ни одна клавиша не была нажата до истечения указанного времени.

В вашем случае, если вы используете только нажатие события, оно будет работать должным образом. К сожалению, вы не можете получить выпущенное событие, используя нажатие. Вы можете использовать MouseEvent types вместо keyEvent для события релиза или как Micka , упомянутое в комментарии, лучше будет использовать программу на основе пользовательского интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...