我无法为我的跟踪栏创建控制面板。该文档仅给出了C ++代码的解释。
它指出,如果轨迹栏应该连接到控制面板,那么" winname可以为空(或NULL)。" See the Doc
我尝试使用NULL和' NULL'但在Python中,这将输出错误。 我可能不会理解这里的基本原则,所以如果你能帮助我,谢谢你。
当我使用Jeru Luke的代码时,这是我得到的输出:
Paint application with the unwanted black windows above the control panel
J.S
答案 0 :(得分:0)
为了创建一个轨迹栏,建议一起创建一个单独的窗口。创建与图像具有相同窗口的轨迹栏会限制要显示的图像的空间。
在下面的示例中,我创建了一个演示,用户可以在其中执行以下操作:
在下面的代码中,我使用了4个轨道栏:
<强>代码:强>
'''
PAINT APPLICATION
can draw using a paint brush with varied sizes
'''
import cv2
import numpy as np
drawing = False # true if mouse is pressed
mode = True
ix, iy = -1, -1
def nothing(x):
pass
cv2.namedWindow('Controls', cv2.WINDOW_NORMAL) #--- window to have all the controls
cv2.createTrackbar("R", "Controls", 0, 255, nothing)
cv2.createTrackbar("G", "Controls", 0, 255, nothing)
cv2.createTrackbar("B", "Controls", 0, 255, nothing)
cv2.createTrackbar("Paint brush thickness", "Controls",0, 30, nothing)
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing,mode
if event == cv2.EVENT_LBUTTONDOWN:
drawing = True
ix, iy = x, y
elif event == cv2.EVENT_MOUSEMOVE:
if drawing == True:
cv2.circle(img, (x, y), pb_thick, (r, g, b), -1)
elif event == cv2.EVENT_LBUTTONUP:
drawing = False
cv2.circle(img, (x, y), pb_thick, (r, g, b), -1)
img = np.zeros((512, 512, 3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle)
while(1):
cv2.imshow('image',img)
r = cv2.getTrackbarPos("R", "Controls")
g = cv2.getTrackbarPos("G", "Controls")
b = cv2.getTrackbarPos("B", "Controls")
pb_thick = cv2.getTrackbarPos("Paint brush thickness", "Controls")
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
cv2.destroyAllWindows()
注意我已经为轨迹栏使用了一个名为Controls
的窗口,为图像使用了另一个名为image
的窗口。我传入了一组类似黑板的黑色像素。您可以使用相同或传递图像。
示例输出
如果你运行它会是这样的:
答案 1 :(得分:0)
(经过测试,可以正常使用)
使用空字符串""
。像这样:
cv2.createTrackbar("bar_name", "", 0, 255, some_callback_func)
这将与您在C ++中所期望的一样。跟踪栏(或按钮,如果需要)将显示在控制面板上。
您需要按ctl+p
(或单击控制面板图标)以弹出并显示控制面板窗口。
文档为here。它指出,如果将跟踪栏连接到控制面板,则 Note [仅Qt后端] winname可以为空(或NULL)。关键字 empty 是关键。希望对您有所帮助。我已经测试过,它可以正常工作。