Почему значение моего трекбара всегда -1 - PullRequest
1 голос
/ 26 октября 2019

Я хочу показать фильм кадр за кадром и выполнить некоторые морфологические операции над кадром, используя Trackbars. Перед созданием соответствующего элемента структурирования мне нужно указать его характеристики, такие как длина, степень и итерации

Мой код:

import cv2

video = cv2.VideoCapture('arsenal_spurs.mp4')
cv2.namedWindow('Trackbar strel')


def morphology_operations(val):
   length = cv2.getTrackbarPos('length', 'Trackbar strel')
   degrees = cv2.getTrackbarPos('degrees', 'Trackbar strel')
   iter_num = cv2.getTrackbarPos('iterations', 'Trackbar strel')
   print(length, degrees, iter_num)

   return length, degrees, iter_num


cv2.createTrackbar('Length', 'Trackbar strel', 1, 50, morphology_operations)
cv2.createTrackbar('Degrees', 'Trackbar strel', 10, 180, morphology_operations)
cv2.createTrackbar('Iterations', 'Trackbar strel', 1, 10, morphology_operations)


while True:
   ret, frame = video.read()
   if ret:
      morphology_operations(0)
      cv2.imshow('frame', frame)
      # keys to move through the frames
      key = cv2.waitKey(1)
      while key not in [ord('q'), ord('>')]:
         key = cv2.waitKey(0)
      if key == ord('q'):
         break
   else:
     break

video.release()
cv2.destroyAllWindows()

КогдаЯ запускаю код, который я получаю Trackbars и frame. Однако значения трех переменных всегда -1. Также, когда я перетаскиваю Trackbars к другим значениям, я получаю -1 в качестве вывода.

Что я здесь не так делаю? Спасибо

enter image description here

1 Ответ

0 голосов
/ 26 октября 2019

Я перечитал документы на OpenCV - вы правильно используете getTrackbarPos. Но я также заметил проблемы с OpenCV Trackbar в Python. В моих предыдущих проектах я преодолевал эти проблемы с помощью следующей техники: 1 функция на трекбар, эта функция объявлена ​​как lambda в createTrackbar. В вашем случае это может быть:

length=0
degrees=0
iter_num=0

def trackbar_length_callback(value):
   global length
   length = value
   print(length)

def trackbar_degrees_callback(value):
   global degrees
   degrees = value
   print(degrees)

cv2.createTrackbar('Length', 'Trackbar strel', 1, 50, lambda a: trackbar_length_callback(a))
cv2.createTrackbar('Degrees', 'Trackbar strel', 10, 180, lambda a: trackbar_degrees_callback(a))

и так далее. Возможно, это неоптимальное решение, но вы можете использовать его в качестве отправной точки.

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