8. 用滑动条作色板

目标 :函数

1.学会把滑动条绑定到 OpenCV 的窗口 学习

2.学习函数cv2.getTrackbarPos()cv2.creatTrackbar() ui

内容说明:code

       建立一个简单的程序来使用滑动条改变画板色。咱们建立一个窗口来显示显色有三个滑动条来置 BGR 的色。当咱们 滑动滚动条是窗口的色也会发生相应改变。状况下窗口的始色为。 cv2.getTrackbarPos() 函数的一个参数是滑动条的名字第二个参数 是滑动条放置窗口的名字第三个参数是滑动条的位置。第四个参数是 滑动条的大值第五个函数是回函数每次滑动条的滑动会用回函 数。回函数常会含有一个参数就是滑动条的位置。在本例中个 函数不用作任何事情咱们只 pass 就能够了。 滑动条的另一个应用就是用做换按。状况下 OpenCV 本 不带有按函数。因此咱们使用滑动条来代替。在咱们的程序中咱们创 建一个换按只有当换按指向 ON 时滑动条的滑动才有用不然窗 户口是的。blog

code:ci

import cv2 
import numpy as np

def nothing(x): 
    pass
#建立一副色图像 
img=np.zeros((300,512,3),np.uint8) 
cv2.namedWindow('image')
cv2.createTrackbar('R','image',0,255,nothing) 
cv2.createTrackbar('G','image',0,255,nothing) 
cv2.createTrackbar('B','image',0,255,nothing)
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:
        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()

运行结果:get

根据上面的代码制做一个画板:it

import cv2 
import numpy as np

def nothing(x): 
    pass
#当标按下时变为True
drawing=False
 # 若是 mode 为true绘制矩形。按下 'm'变成绘制曲线。
mode=True 
ix,iy=-1,-1
#建立回函数 
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 ix,iy,drawing,mode
    #当按下左是回始位置坐标 
    if event==cv2.EVENT_LBUTTONDOWN: 
        drawing=True 
        ix,iy=x,y
    #当标左按下并移动是绘制图形。 event能够查看移动 flag查看是否按下 
    elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON: 
        if drawing==True:
            if mode==True: 
                cv2.rectangle(img,(ix,iy),(x,y),color,-1) 
            else: 
                # 绘制圆圈小圆点在一就成了线 3 代了笔画的粗细 
                cv2.circle(img,(x,y),3,color,-1) 
                # 下注掉的代码是始点为圆心点到终点为半径的 
                # r=int(np.sqrt((x-ix)**2+(y-iy)**2)) 
                # cv2.circle(img,(x,y),r,(0,0,255),-1) 
                # 当标松开中止绘画。
    elif event==cv2.EVENT_LBUTTONUP: 
        drawing==False 
        # if mode==True: # cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1) # else: # cv2.circle(img,(x,y),5,(0,0,255),-1)
img=np.zeros((512,512,3),np.uint8) 
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

运行结果:event