连续绘图(opencv)
continuous drawing (opencv)
我正在尝试跟随鼠标的移动进行绘制。没问题。
当我慢慢移动鼠标时,绘制的内容看起来是连续的,但是当我稍微加快鼠标移动速度时,绘制的内容是不连续的。
如何用鼠标连续画画
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()
我得到的结果:
当鼠标快速移动时,您无法快速绘制以跟上鼠标事件。要确认这一点,请修改您的代码以在不绘制的情况下捕获鼠标坐标并将它们添加到列表中。添加一个按键处理程序来绘制捕获的点。如果是这种情况,您可以在小透明图像上画一次圆圈。然后,您可以覆盖该小图像,而不是绘制一个圆圈,这在 space 的几分之一秒内涉及太多计算。试一试并提出建议。
编辑:
正如我在上面的评论中所说,
So you need to link the individual points with lines.
这是您唯一可以表演的 'in live' 绘图。证明:
所以您需要跟踪您访问的每个像素,以便在它和鼠标移动到的下一个像素之间画一条线:
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
我正在尝试跟随鼠标的移动进行绘制。没问题。
当我慢慢移动鼠标时,绘制的内容看起来是连续的,但是当我稍微加快鼠标移动速度时,绘制的内容是不连续的。
如何用鼠标连续画画
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()
我得到的结果:
当鼠标快速移动时,您无法快速绘制以跟上鼠标事件。要确认这一点,请修改您的代码以在不绘制的情况下捕获鼠标坐标并将它们添加到列表中。添加一个按键处理程序来绘制捕获的点。如果是这种情况,您可以在小透明图像上画一次圆圈。然后,您可以覆盖该小图像,而不是绘制一个圆圈,这在 space 的几分之一秒内涉及太多计算。试一试并提出建议。
编辑:
正如我在上面的评论中所说,
So you need to link the individual points with lines.
这是您唯一可以表演的 'in live' 绘图。证明:
所以您需要跟踪您访问的每个像素,以便在它和鼠标移动到的下一个像素之间画一条线:
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