【问题标题】:OpenCV Trackbar, how to display max, min and current value on trackbar windowOpenCV Trackbar,如何在轨迹栏窗口上显示最大值、最小值和当前值
【发布时间】:2015-11-25 15:44:12
【问题描述】:

如何要求在轨迹栏窗口上显示栏的范围(最大值、最小值)和当前的指针值?这是使用轨迹栏的示例。

# trackbar
import cv2
import numpy as np

def nothing(x):
    pass

img = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('image')

# Create trackbars

cv2.createTrackbar('R', 'image', 255, 255, nothing)
cv2.createTrackbar('G', 'image', 0, 255, nothing)
cv2.createTrackbar('B', 'image', 0, 255, nothing)

# Create switch for on/off

switch = '0: OFF \n1: ON'
cv2.createTrackbar(switch, 'image', 0, 1, nothing)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xFF
    if k == 27:   # 27 is Escape
        break
    r = cv2.getTrackbarPos('R','image')
    g = cv2.getTrackbarPos('G','image')
    b = cv2.getTrackbarPos('B','image')
    s = cv2.getTrackbarPos(switch,'image')

    if s == 0:
        img[:] = 0

    else:
        img[:] = [b,g,r]

cv2.destroyAllWindows()

不显示值:

【问题讨论】:

  • 你知道怎么做吗?我有同样的问题:(
  • 你好,我怕这太老了,我不记得了。对不起。

标签: python opencv


【解决方案1】:

没有办法指示不同于 pos=0 的最小值,但由于轨迹栏没有刻度标签,有时将第一个刻度重新解释为 1 (pos+1) 很有用

【讨论】:

    【解决方案2】:

    我在大学的一项活动中遇到了类似的情况。我做了一个解决方法,我使用cv.putText 方法将 BGR 轨迹栏的值放在图像窗口上。

    我为R 值执行的步骤(BG 值将相同):

    1. 创建一个函数update_R_value。将此函数传递给cv2createTrackBar 方法。

    2. 在图像上放置可以显示R 值的文本。初始值为 0(零)。假设我们把它放在 (x, y) 位置。

    3. 然后在update_R_value,每次更改轨迹栏位置时,我都会更改此文本值。

    img = np.zeros((512,512,3), np.uint8)
    bgr_track = {'B': 0, 'G': 0, 'R': 0}    # Initial values of BGR
        
    # Values of trackbar as text on image for R trackbar.
    font = cv2.FONT_HERSHEY_SIMPLEX
    img = cv2.putText(img, "R: ", (10, 330), font, 0.5, (255,255,255), 1)
    img = cv2.putText(img, "0", (30, 330), font, 0.5, (255,255,255), 1)
        
    def update_R_value(x):
        global font, img, bgr_track
        img = cv2.putText(img, f"{bgr_track['R']}", (30, 330), font, 0.5, (0,0,0), 1)    # Fill previous text pixels with black
        img = cv2.putText(img, f"{x}", (30, 330), font, 0.5, (255,255,255), 1)   # Put new text with color white
        bgr_track['R'] = x
    

    注意:

    在 OpenCV 中,当我们在图像上放置文本时,它只是改变该特定位置的像素值以使文本显示。它涉及跟踪以前的 BGR 值,因为 cv2.putText 没有记录以前更改的像素值。

    所以,为了更新新的 trackbar 值,首先我将先前值设为黑色的文本,然后将更新后的值设为白色,并将新值保存在字典中以重复该过程。

    蓝绿轨迹栏完成后的完整输出是这样的:

    您也可以查看完整代码here

    谢谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多