python - python画图不连续怎么解决

标签 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_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()

第一条线画得慢,第二条线画得快:

the first line was drawn slowly, the 2nd one was drawn fast

我的问题是:

  1. 是什么导致了这个问题?
  2. 如何解决。

最佳答案

不要使用circle,当你使用circle时,在快速移动时会有间隙。会有间隙,因为当您快速移动时,在绘制前一个圆圈之前会引发新的鼠标事件。使用 line 代替如下:

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

关于python - python画图不连续怎么解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435592/

相关文章:

python - 使用python永久更改浏览器(chrome、firefox和edge)的下载路径

python - 为简约的 Python 脚本创建一个简单的 GUI

python - 如何将数据结构(例如字典)从单独的文件导入或包含到 Python 文件中

opencv - JavaCV中的缝合器

python - opencv 人脸检测仅从每张图片中保存一张脸,即使有几张脸

python - NumPy "record array"或 "structured array"或 "recarray"

Python lambda 函数检查我的 S3 存储桶是否公开并将它们设为私有(private)

c++ - 如何使用 opencv 和 c++ 从网络摄像头帧中查找轮廓?

c++ - OpenCV - 坚持解决练习

c++ - 使用opencv的光流