Python OpenCV waitKey() и waitKeyEx() не могут считывать клавиши со стрелками после использования трекбара

#python #opencv #arrow-keys

Вопрос:

Я пытаюсь создать простую программу для навигации по кадрам видео. Эти кадры уже извлечены в виде файлов PNG. Я использую OpenCV 4.5.4.58 вместе с python 3.7.11. Я уже создал программу, которая могла бы перемещаться по всем моим кадрам с помощью клавиш со стрелками, но для удобства я хочу добавить панель треков, чтобы быстрее перемещаться по этим кадрам. Эта панель треков отображается в секундах (номер кадра делится на мой кадр в секунду), она хорошо работает до тех пор, пока мне не понадобится использовать клавиши со стрелками после использования панели треков для повторной навигации кадр за кадром.

Вот упрощенная версия моего кода, чтобы показать вам проблему:

 import cv2 as cv import numpy as np  def empty(no_val):  pass  img = np.zeros((255, 255, 3)) clone = img.copy()  cv.namedWindow("image") cv.createTrackbar("track", "image", 0, 100//25, empty) #here 100 represents my frame number and 25 my fps  i=0 old_track_pos = 0 while True:  img = clone.copy()  cv.putText(img, str(i), (125,125), cv.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 1)  cv.imshow("image", img)  key = cv.waitKeyEx(1)  track_pos = cv.getTrackbarPos("track", "image")   if key != -1:  print(key)   if key == 65361 and i gt; 0:  i -= 1   if key == 65363 and i lt; 100:  i  = 1   if track_pos != old_track_pos:  old_track_pos = track_pos  i = track_pos*25   if key == ord("c"):  break  cv.destroyAllWindows()  

Если вы запустите этот код, вы увидите, что при использовании клавиш со стрелками перед панелью треков число увеличивается и уменьшается на 1. Затем, если вы используете панель треков, она увеличивается на 25 на 25, после этого, если вы снова попытаетесь использовать стрелки, она увеличится на 25 на 25, потому что панель треков все еще выбрана, но как только вы нажмете на изображение, стрелки не будут иметь никакого эффекта. Другие клавиши по-прежнему хорошо работают, такие как c, которые выходят из окна.

Спасибо всем людям, которые могут помочь устранить эту проблему, и хорошего вам дня.