建立一個畫闆,可以自選各種顔色來繪制各種圖形。
import numpy as np
import cv2 as cv
def nothing(x):
pass
drawing = False #如果按下滑鼠,則為真
mode = True #如果為真,繪制矩形。按m鍵可以切換到曲線
ix,iy = -1,-1
#滑鼠回調函數
def draw_circle(event, x, y, flags, param):
r = cv.getTrackbarPos('R','image')
g = cv.getTrackbarPos('G','image')
b = cv.getTrackbarPos('B','image')
color = (b,g,r)
global ix,iy,drawing,mode
if event == cv.EVENT_LBUTTONDOWN:
drawing = True
ix,iy = x,y
#當滑鼠左鍵按下并移動是繪制圖形。event可以檢視移動,flags檢視是否按下
elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON:
if drawing == True:
if mode == True:
cv.rectangle(img, (ix,iy), (x,y), color, -1)
else:
r = int(np.sqrt((x - ix)**2 + (y - iy)**2))
cv.circle(img,(x,y), r, color, -1)
#當滑鼠松開停止繪畫
elif event == cv.EVENT_LBUTTONUP:
drawing = False
if mode == True:
cv.rectangle(img, (ix,iy),(x,y),color,-1)
else:
cv.circle(img,(x,y),abs(x-ix),color,-1)
#建立一副黑色圖像
img = np.zeros((512,512,3),np.uint8)
cv.namedWindow('image')
cv.createTrackbar('R','image',0,255,nothing)
cv.createTrackbar('G','image',0,255,nothing)
cv.createTrackbar('B','image',0,255,nothing)
cv.setMouseCallback('image', draw_circle)
while(1):
cv.imshow('image', img)
if cv.waitKey(1) & 0xFF == 27:
break
elif cv.waitKey(1) & 0xFF == ord('m'):
mode = not mode
cv.destroyAllWindows()
複制
當一枚小畫家~