题目地址为:.x/db/d5b/tutorial_py_mouse_handling.html
题目内容:In our last example, we drew filled rectangle. You modify the code to draw an unfilled rectangle.
完整代码如下:
import numpy as np
import cv2 as cv
drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1
# mouse callback function
def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,yelif event == cv.EVENT_MOUSEMOVE:if drawing == True:if mode == angle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)elif event == cv.EVENT_LBUTTONUP:drawing = Falseif mode == angle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv.circle(img,(x,y),5,(0,0,255),-1)img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):cv.imshow('image',img)k = cv.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:break
cv.destroyAllWindows()
效果图:
首先将cv.circle(img,(x,y),5,(0,0,255),-1)
中最后一个参数修改,-1
代表填充满,如果最后一个参数修改为正整数例如将最后一个参数修改为5
,则代表的意思是绘制矩形时的线宽度为5
。
注释掉绑定鼠标移动时绘制矩形的事件。就是注释掉这一部分:
# elif event == cv.EVENT_MOUSEMOVE:# if drawing == True:# if mode == True:# cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)# else:# cv.circle(img,(x,y),5,(0,0,255),-1)
修改后的完整代码如下:
import numpy as np
import cv2 as cv
drawing = False # true if mouse is pressed
mode = True # if True, draw rectangle. Press 'm' to toggle to curve
ix,iy = -1,-1
# mouse callback function
def draw_circle(event,x,y,flags,param):global ix,iy,drawing,modeif event == cv.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,y# elif event == cv.EVENT_MOUSEMOVE:# if drawing == True:# if mode == True:# cv.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)# else:# cv.circle(img,(x,y),5,(0,0,255),-1)elif event == cv.EVENT_LBUTTONUP:drawing = Falseif mode == angle(img,(ix,iy),(x,y),(0,255,0),5) else:cv.circle(img,(x,y),5,(0,0,255),5)img = np.zeros((512,512,3), np.uint8)
cv.namedWindow('image')
cv.setMouseCallback('image',draw_circle)
while(1):cv.imshow('image',img)k = cv.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:break
cv.destroyAllWindows()
效果图:
本文发布于:2024-01-29 09:17:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649103314253.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |