我正在尝试跟随鼠标的移动进行绘制。工作正常。
当我缓慢移动鼠标时,所绘制的内容看起来是连续的,但是当我稍微加快鼠标移动速度时,我会得到不连续的图形。
怎样才能连续用鼠标画图
import cv2
import numpy as np
drawing=False # true if mouse is pressed
mode=True # if True, draw rectangle. Press 'm' to toggle to curve
# mouse callback function
def interactive_drawing(event,x,y,flags,param):
global ix,iy,drawing, mode
if event==cv2.EVENT_LBUTTONDOWN:
drawing=True
ix,iy=x,y
elif event==cv2.EVENT_MOUSEMOVE:
if drawing==True:
if mode==True:
cv2.circle(img,(x,y),1,(0,0,255),-1)
print x,y
elif event==cv2.EVENT_LBUTTONUP:
drawing=False
if mode==True:
cv2.circle(img,(x,y),1,(0,0,255),-1)
#print x,y
#cv2.line(img,(x,y),(x,y),(0,0,255),10)
return x,y
img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('begueradj')
cv2.setMouseCallback('begueradj',interactive_drawing)
while(1):
cv2.imshow('begueradje',img)
k=cv2.waitKey(1)&0xFF
if k==27:
break
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我得到的结果:

当鼠标快速移动时,您无法快速绘制以跟上鼠标事件。要确认这一点,请修改代码以捕获鼠标坐标而不进行绘图并将它们添加到列表中。添加按键处理程序来绘制捕获的点。如果是这种情况,您可以在一个小的透明图像上画一个圆圈一次。然后,您可以覆盖该小图像,而不是绘制一个圆圈,这会在不到一秒的时间内进行太多计算。尝试一下并提出建议。
编辑:
正如我在上面的评论中所说,
所以你需要用线连接各个点。
这是您可以执行的唯一“现场”绘画。证明:

因此,您需要跟踪您访问的每个像素,以便在它与鼠标移动到的下一个像素之间画一条线:
cv2.line(img,(ix,iy),(x,y),(0,0,255),10) # draw line between former and present pixel
ix=x # save former x coordinate
iy=y # save former y coordinate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4022 次 |
| 最近记录: |