如何解决python绘图时的断线问题
这是我的代码:如何解决python绘图时的断线问题,python,opencv,Python,Opencv,这是我的代码: import numpy as np import cv2 drawing = False def draw_circle(event,x,y,flags,param): global ix,iy,drawing if event == cv2.EVENT_LBUTTONDOWN: drawing= True ix,iy=x,y elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLA
import numpy as np
import cv2
drawing = False
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing= True
ix,iy=x,y
elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
if drawing == True:
cv2.circle(img,(x,y),3,(0,0,0),-1)
elif event == cv2.EVENT_LBUTTONUP:
drawing == False
img=np.ones((512,512,3),np.uint8)*255
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
while(True):
cv2.imshow('image',img)
if cv2.waitKey(1)&0xff == ord('q'):
break
cv2.destroyAllWindows()
第一条线画得很慢,第二条线画得很快:
我的问题是:
不要使用
circle
,当您使用circle
时,在快速移动时会有间隙。当您快速移动时,会在绘制上一个圆之前引发新的鼠标事件,因此会出现间隙。使用行
,如下所示:
def draw_circle(event,x,y,flags,param):
global ix,iy,drawing
if event == cv2.EVENT_LBUTTONDOWN:
drawing= True
ix,iy=x,y
elif event == cv2.EVENT_MOUSEMOVE and flags == cv2.EVENT_FLAG_LBUTTON:
if drawing:
cv2.line(img,(ix,iy),(x,y),(0,0,0), 3)
ix,iy = x,y
elif event == cv2.EVENT_LBUTTONUP:
drawing == False
为什么你希望没有任何差距?您正在一系列离散点处绘制一个圆。你需要写一些代码来“连接点”-从最后一个点到当前点画一条线。我知道我画了一系列离散点,但由于程序和结果的原因,它似乎每勾一个圆圈。只要画一个圆的速度比鼠标的移动速度快,它就应该是连续的,因为在我看来,每个圆都应该有重叠的部分。这正是正在发生的事情。当你慢慢画这条线时,它们会重叠,快而不重叠。你应该更彻底地调查下面Abdul的回答。这几乎正是我要发布的内容。@wypxhh123存在间隙,因为当您快速移动时,在绘制上一个圆圈之前会引发一个新的鼠标事件。谢谢您的回复。但我发现仍然有差距。我仍然不明白为什么会有差距。根据程序,没有理由不连续。当我使用上述方法时,没有间隙。你能展示你的结果吗?@wypxhh123我更新了答案,并说明了原因。希望这有帮助。如果有帮助,请标记为答案。:)我复制了你的代码,但结果还是不好。结果:看起来您仍然在画圆。