如何创建不调用任何功能的Trackbars? OpenCV 3.1与Python 2.7

时间:2016-03-29 15:56:17

标签: python opencv trackbar opencv3.1

我试图对图像进行阈值处理。我使用了cv2.createTrackbar函数as-
 cv2.createTrackbar('High H','image',0,179, None)
现在最后一部分就是我遇到的麻烦。在我的代码中,我使用highH = cv2.getTrackbarPos('High H','image')来获取我的跟踪栏值并在cv2.inRange函数中使用它。因此很明显我不需要将函数作为函数的最后一个参数调用。现在问题是我似乎无法输入函数。我尝试删除最后一部分,我收到错误 -

  

cv2.createTrackbar仅适用于5个争论。只给了4个。

嗯,好吧,好像我不能跳过一个部分 接下来我尝试回调而没有。我收到了这个错误: -

  

什么时候没用: - NameError:name' nothing'未定义
  使用回调时: - NameError:name' callback'未定义

好一段时间后我尝试使用无。出现此错误: -

  

TypeError:on_change必须是可调用的

那么如何在不调用函数的情况下使用cv2.createTrackbar函数?

谢谢!

2 个答案:

答案 0 :(得分:3)

为什么不按预期创建一个简单的函数?

简单的解决方案是定义一个返回轨迹栏位置的简单函数。当用户移动轨迹栏时会调用它,但不会发生任何事情。

import cv2
def f(x): return x
win = cv2.namedWindow("MyImage")
tb = cv2.createTrackbar("MyTrackbar","MyImage",0,179,f)
#assume you have some cv2 image already loaded
cv2.imshow("MyImage", img)

您还可以使用匿名lambda函数进行回调,如下所示:

import cv2
win = cv2.namedWindow("MyImage")
tb = cv2.createTrackbar("MyTrackbar","MyImage",0,179,lambda x:x)
#assume you have some cv2 image already loaded
cv2.imshow("MyImage", img)

答案 1 :(得分:-1)

def f():
    pass
cv2.createTrackbar('thing', 'other thing', 0, 179, f)

这也可以。