为什么轨迹栏的值总是1

2024-07-05 15:59:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想一帧一帧地展示一部电影,并使用Trackbars对该帧进行一些形态学操作。在创建相应的structuringselement之前,我需要指定它的特性,例如长度、度数迭代

我的代码:

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()

当我运行代码时,我得到了Trackbarsframe。然而,这三个变量的值总是-1。同样,当我将Trackbars拖动到不同的值时,我得到-1作为输出

我做错什么了?谢谢

enter image description here


Tags: keyvideocv2framelengthnumoperationsdegrees
1条回答
网友
1楼 · 发布于 2024-07-05 15:59:23

我在OpenCV上重新读取了文档-您使用getTrackbarPos是正确的。但是我也注意到了Python中OpenCV的Trackbar的问题。在我以前的项目中,我通过以下技术克服了这些问题:每个trackbar有一个函数,这个函数在createTrackbar中声明为lambda。在您的情况下,它可以是:

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))

等等。很可能,这是一个次优的解决方案,但你可以用它作为一个起点

相关问题 更多 >