我修改了一个来自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)
    elif event==cv2.EVENT_LBUTTONUP:
        drawing=False
        if mode==True:
            cv2.circle(img,(x,y),1,(0,0,255),-1)


img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('Window')
cv2.setMouseCallback('Window',interactive_drawing)
while(1):
    cv2.imshow('Window',img)
    k=cv2.waitKey(1)&0xFF
    if k==27:
        break
cv2.destroyAllWindows()

希望此屏幕截图可以解释我的问题:因为我不得不将鼠标光标移动得太慢,所以细线看起来是连续的。较长的线不是连续的,因为我必须以正常速度移动光标:

我希望能够像这样连续绘制:

任何人都可以展示如何解决此问题?
先感谢您。

最佳答案

与其为每个回调函数绘制单个圆圈,不如尝试从最后一个点到当前点画一条线。
因此,您必须将最后一点存储在全局变量中。

07-24 09:45
查看更多