opencv 为什么我的轨迹栏的值总是-1

zbdgwd5y  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(103)

我想一帧一帧地播放一部电影,并使用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作为输出。
我做错什么了?谢啦,谢啦


的数据

mdfafbf1

mdfafbf11#

我知道我有点晚了,但createTrackbar和getTrackbarPos的拼写必须完全相同,否则您将获得值-1作为输出,并且您的caplitalization不同

r6l8ljro

r6l8ljro2#

我重新阅读了OpenCV上的文档-您使用的getTrackbarPos是正确的。但我也注意到了OpenCV的Trackbar在Python中的问题。在我以前的项目中,我用以下技术克服了这些麻烦:每个轨迹条1个函数,该函数在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))

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

相关问题