目标 :函数
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