创建一个画板,可以自选各种颜色来绘制各种图形。
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()
当一枚小画家~