1、代码如下。
2、效果如下。
3、用鼠标作图,可以调用一个自定义函数实现:def draw(event,x,y,flags,param像粜杵泳): r=cv2.getTrackbarPos('R','a') g=cv2.getTrackbarPos('G','a') b=cv2.getTrackbarPos('B','a') color=(b,g,r) global ix,iy,drawing,m if event==cv2.EVENT_LBUTTONDOWN: drawing=True ix,iy=x,y elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON: drawing==True if m==True: cv2.rectangle(img,(ix,iy),(x,y),color,-1) else: cv2.circle(img,(x,y),3,color,-1) elif event==cv2.EVENT_LBUTTONUP: drawing==False按下鼠标左键并拖动,并且模式m为真,则在画板里面画矩形;按下鼠标左键并拖动,并且模式m为假,则在画板里面画一串半径为3的小圆;抬起鼠标,这个过程结束;这里的逻辑关系还是很明确的。
4、img=np.zeros((512,512,3),np.uint8) #创建3通道的图片cv2.namedWindow('稆糨孝汶;a') #创建图片窗口cv2.createTrackbar('R','a',0,255,nothing) #插入调色滑动条cv2.createTrackbar('G','a',0,255,nothing)cv2.createTrackbar('B','a',0,255,nothing)cv2.setMouseCallback('a',draw) #捕获鼠标拖动的坐标值while(1): cv2.imshow('a',img) k=cv2.waitKey(1)&0xFF if k==ord('m'): #键盘里的m键实现模式在真假之间切换 m=not m elif k==27: break当鼠标点下之后,ix,iy=x,y,就是初始位置的坐标。
5、当模式为真的时候,鼠标拖动,可以画出矩形,此时ix,iy保持不变,而x,y则以鼠标最终位置为准。鼠标点下、拖动、抬起,一个矩形就绘制完成了。
6、矩形如果特别细,可以近似看作是线段。不过只能画出水平线和竖直线。
7、点击m键,切换到另一种模式,此时鼠标点下并拖动,就会画出一串小圆。
8、如果鼠标移动的过快,会出现断线现象。