2

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

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

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

无使用时:- NameError:未定义名称“无”
使用回调时:- NameError:未定义名称“回调”

好的,过了一会儿我尝试使用无。得到这个错误:-

TypeError:on_change 必须是可调用的

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

谢谢!

4

2 回答 2

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)
于 2016-03-29T16:06:42.187 回答
-1
def f():
    pass
cv2.createTrackbar('thing', 'other thing', 0, 179, f)

这也有效。

于 2019-06-10T17:53:58.627 回答