OpenCV-Python-(7)-Trackbar轨迹栏目

原文:Trackbar as the Color Palette

轨迹栏绑定到OpenCV窗口

  • cv2.getTrackbarPos()
  • cv2.createTrackbar()

我们将创建一个简单的应用程序,显示您指定的颜色。您有一个显示颜色的窗口和三个轨道栏,用于指定B,G,R各颜色。您可以滑动轨迹栏并相应地窗口颜色更改。默认情况下,初始颜色将设置为黑色。

cv2.getTrackbarPos()& cv2.createTrackbar()

第一个参数是轨迹栏名称

第二个参数是它所属的窗口名称

第三个参数是默认值

第四个参数是最大值

第五个参数是执行的回调函数每次轨迹栏值都会发生变化。

回调函数始终具有默认参数,即轨迹栏位置。在我们的例子中,函数什么都不做,所以我们简单地通过。

轨迹栏的另一个重要应用是将其用作按钮或开关。默认情况下,OpenCV没有按钮功能。因此,您可以使用跟踪栏来获得此类功能。在我们的应用程序中,我们创建了一个开关,其中应用程序仅在开关打开时有效,否则屏幕始终为黑色。

import cv2
import numpy as np

#创建回调函数
def nothing(*arg):
    pass

#创建一个黑色窗口
window = np.zeros((300,512,3), np.uint8)
cv2.namedWindow('What tea is black tea plus green tea?')

#创建改变颜色的滑动条
cv2.createTrackbar('BlackTea','What tea is black tea plus green tea?',0,255,nothing)
cv2.createTrackbar('GreenTea','What tea is black tea plus green tea?',0,255,nothing)
cv2.createTrackbar('BlueTea','What tea is black tea plus green tea?',0,255,nothing)

#创建控制函数的开关
cv2.createTrackbar('Show Tea', 'What tea is black tea plus green tea?',0,1,nothing)

while True:
    
    cv2.imshow('What tea is black tea plus green tea?', window)
    
    #获取四个滑动条的位置
    r = cv2.getTrackbarPos('BlackTea','What tea is black tea plus green tea?')
    g = cv2.getTrackbarPos('GreenTea','What tea is black tea plus green tea?')
    b = cv2.getTrackbarPos('BlueTea','What tea is black tea plus green tea?')
    s = cv2.getTrackbarPos('Show Tea','What tea is black tea plus green tea?')
    
    if s == 0 :
        window[:] = 0
    else:
        window[:] = [b,g,r]
    
    ch = cv2.waitKey(1) & 0xFF
    if ch == 27:
        break
    
cv2.destroyAllWindows()

结果:


图画板

创建一个图画板,默认绘制矩形,按下'm'键变为绘制线条。

import cv2

def nothing(x):
    pass

#创建鼠标事件
def draw_circle(event,x,y,flags,param):
    
    #获取四个滑动条的位置
    r = cv2.getTrackbarPos('R', 'image')
    g = cv2.getTrackbarPos('G', 'image')
    b = cv2.getTrackbarPos('B', 'image')
    color = (b,g,r)
    
    global position, drawing, mode
    
    
    if event == cv2.EVENT_LBUTTONDOWN:
        drawing = True
        position = (x, y)   #当按下左键是返回起始位置坐标
        
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON: #鼠标左键拖拽
        if drawing == True:
            if mode == True:
                cv2.rectangle(img,position,(x,y),color,-1) #绘制矩形
            else:
                cv2.circle(img,(x,y),2,color,-1) #绘制圆圈,小圆点连在一起就成了线,3代表了笔画的粗细
  
    elif event == cv2.EVENT_LBUTTONUP: #鼠标松开停止绘画
        drawing = False

#当按下鼠标时变为True
drawing = False
#如果mode为true时候绘制矩形,按下m变成绘制曲线
mode = True

img = cv2.imread(r'C:\Users\x\Desktop\12.jpg', cv2.IMREAD_ANYCOLOR)
cv2.namedWindow('image')

#创建改变颜色的滑动条
cv2.createTrackbar('R','image',0,255,nothing)
cv2.createTrackbar('G','image',0,255,nothing)
cv2.createTrackbar('B','image',0,255,nothing)
cv2.setMouseCallback('image',draw_circle)

while (1):   
    cv2.imshow('image', img)    
    
    k = cv2.waitKey(1) & 0xFF
    if k == ord('m'):
        mode = not mode
    elif k == 27:
        break

cv2.destroyAllWindows()    

结果:

 

猜你喜欢

转载自blog.csdn.net/qq_40755643/article/details/84887729
今日推荐