|
原始碼
- import cv2
- import numpy as np
- drawing=False
- mode=True
- ix,iy=-1,-1
- def nothing(x):
- pass
- def draw_circle(event,x,y,flags,param):
- s=0
- r=cv2.getTrackbarPos('R','image')
- g=cv2.getTrackbarPos('G','image')
- b=cv2.getTrackbarPos('B','image')
- color=(b,g,r)
- if s==1:
- color=(255,255,255)
- s=cv2.getTrackbarPos('eraser','image')
- thin=cv2.getTrackbarPos('thin','image')
- global ix,iy,drawing,mode
- if event==cv2.EVENT_LBUTTONDOWN:
- drawing=True
- ix,iy=x,y
- 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:
- cv2.circle(img,(x,y),thin,color,-1)
- elif event==cv2.EVENT_LBUTTONUP:
- drawing==False
- img=np.zeros((440,440,3),np.uint8)
- img[:]=255
- 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.createTrackbar('eraser','image',0,1,nothing)
- cv2.createTrackbar('thin','image',1,50,nothing)
- cv2.setMouseCallback('image',draw_circle)
- while True:
- cv2.imshow('image',img)
- k=cv2.waitKey()
- if k==ord('m'):
- mode=not mode
- elif k==27:
- break
複製代碼• 視窗建立後會不斷的做訊息傳遞,所以Trackbar若改為nothing的函數,代表不做任何事情。
• setMouseCallback( )代表滑鼠相關的訊息偵測,呼叫draw_circle函數。 - cv2.createTrackbar('R','image',0,255,nothing)
- cv2.createTrackbar('G','image',0,255,nothing)
- cv2.createTrackbar('B','image',0,255,nothing)
- cv2.createTrackbar('eraser','image',0,1,nothing)
- cv2.createTrackbar('thin','image',1,50,nothing)
- cv2.setMouseCallback('image',draw_circle)
複製代碼
演示圖
OpenCV Trackbar 動作偵測
|
|