如何在OpenCV中设置轨道栏的默认位置?

时间:2016-09-07 06:21:05

标签: python opencv

在OpenCV中,使用createTrackbar函数,如何将默认滑块位置设置为最大值?

我有几个滑块,一些代表最小值,一些代表最大值。如果最大值的滑块以最大值(255)开始,而不是最小值(0),那将是很好的。

我查看了OpenCV documentation pages,但我找不到解决方案。

import cv2
import numpy as np

def nothing(x):
    pass

# Create a black image, a window
#img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')
cv2.namedWindow('hsv')
cv2.namedWindow('masq')
cap = cv2.VideoCapture(0)

# create trackbars for color change
cv2.createTrackbar('R-low','image',0,255,nothing)
cv2.createTrackbar('R-high','image',0,255,nothing)

cv2.createTrackbar('G-low','image',0,255,nothing)
cv2.createTrackbar('G-high','image',0,255,nothing)

cv2.createTrackbar('B-low','image',0,255,nothing)
cv2.createTrackbar('B-high','image',0,255,nothing)


while(1):
    ret, img = cap.read()
    # Convert BGR to HSV
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:
        break

    # get current positions of four trackbars
    rl = cv2.getTrackbarPos('R-low','image')
    rh = cv2.getTrackbarPos('R-high','image')

    gl = cv2.getTrackbarPos('G-low','image')
    gh = cv2.getTrackbarPos('G-high','image')

    bl = cv2.getTrackbarPos('B-low','image')
    bh = cv2.getTrackbarPos('B-high','image')

    lower = np.array([rl,gl,bl])
    upper = np.array([rh,gh,bh])

    print(rl)

    img[:] = [bl,gl,rl]

    # Threshold the HSV image to get only certain colors
    mask = cv2.inRange(hsv, lower, upper)    


    res = cv2.bitwise_and(img,img, mask= mask)

    cv2.imshow('image',img)
    cv2.imshow('masq',mask)
    cv2.imshow('hsv',hsv)


cv2.destroyAllWindows()

在加载时,它最终看起来像这样:

enter image description here

3 个答案:

答案 0 :(得分:3)

只需使用值字段:

  

Python:cv.CreateTrackbar(trackbarName,windowName,value,count,   onChange)→无

     

参数:
     trackbarname - 创建的跟踪栏的名称。

     

winname - 将用作父级的窗口的名称   创建的跟踪栏。

     

value - 指向整数的可选指针   变量,其值反映滑块的位置。上   创建时,滑块位置由此变量定义。

     算了 -   滑块的最大位置。最小位置始终为0.

     

onChange - 指向每次滑块时调用的函数   改变立场。

     

此函数应该原型为void   FOO(INT,无效*); ,其中第一个参数是轨迹栏位置   第二个参数是用户数据(参见下一个参数)。如果   回调是NULL指针,没有调用回调,但只是   值已更新。 userdata - 按原样传递给的用户数据   打回来。它可用于处理跟踪栏事件而无需使用   全局变量。

Source

答案 1 :(得分:1)

我认为你没有太多关注阅读文档,你可以在那里找到:
value - 指向整数变量的可选指针,该变量的值反映滑块的位置。创建后,滑块位置由此变量定义 计数 - 滑块的最大位置。最小位置始终为0.

我可以理解这一点,您只需将value设置为count

即可

答案 2 :(得分:0)

该值通常应为0-100的整数倍,如果默认值是betweek 0-1乘以x 100。

对我有用。