Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV轨迹栏,如何在轨迹栏窗口上显示最大值、最小值和当前值_Python_Opencv - Fatal编程技术网

Python OpenCV轨迹栏,如何在轨迹栏窗口上显示最大值、最小值和当前值

Python OpenCV轨迹栏,如何在轨迹栏窗口上显示最大值、最小值和当前值,python,opencv,Python,Opencv,如何要求在轨迹栏窗口上显示条的范围(最大值、最小值)和当前指向值?下面是使用轨迹栏的示例 # 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) c

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

# 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()
其中不显示值:

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

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

我对
R
值执行的步骤(对于
B
G
值将相同):

  • 创建一个函数
    update\R\u value
    。将此函数传递给
    cv2
    createTrackBar
    方法

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

  • 然后在
    update\u R\u value
    中,每次更改轨迹栏位置时,我都会更改此文本值

  • img=np.zero((512512,3),np.uint8)
    bgr#u track={'B':0,'G':0,'R':0}#bgr的初始值
    #轨迹栏的值作为R轨迹栏图像上的文本。
    font=cv2.font\u HERSHEY\u SIMPLEX
    img=cv2.putText(img,“R:”,(10330),字体,0.5,(255255),1)
    img=cv2.putText(img,“0”(30330),字体,0.5,(255255),1)
    def更新值(x):
    全局字体、img、bgr\u曲目
    img=cv2.putText(img,f“{bgr_track['R']}”,(30330),字体,0.5,(0,0,0),1)#用黑色填充先前的文本像素
    img=cv2.putText(img,f“{x}”,(30330),字体,0.5,(255255),1)#使用白色放置新文本
    bgr_轨道['R']=x
    
    注:

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

    因此,为了更新新的轨迹栏值,首先我将一个文本的上一个值用黑色表示,然后将更新后的值用白色表示,并将新值保存在字典中以重复该过程

    对蓝色和绿色轨迹栏执行此操作后的完整输出如下所示:

    您还可以查看完整的代码


    谢谢。

    你知道怎么做了吗?我也有同样的问题:(嗨,恐怕这个太旧了,我已经不记得了。对不起。