Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决python绘图时的断线问题_Python_Opencv - Fatal编程技术网

如何解决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我更新了答案,并说明了原因。希望这有帮助。如果有帮助,请标记为答案。:)我复制了你的代码,但结果还是不好。结果:看起来您仍然在画圆。