Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.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 OpenCV中使用鼠标绘制变半径圆_Python_Opencv_Drawing - Fatal编程技术网

在Python OpenCV中使用鼠标绘制变半径圆

在Python OpenCV中使用鼠标绘制变半径圆,python,opencv,drawing,Python,Opencv,Drawing,我的问题是关于。 在上面的教程中,每当我们拖动鼠标指针时,都会绘制一个半径恒定的圆(即5像素) 我想画一个圆,半径等于鼠标左键拖动的距离。还希望在鼠标左键按下后移动鼠标指针时显示预览。类似于MS Paint中发生的情况 import cv2 import numpy as np drawing=False mode=True # True--> Rectangle , False --> Circle ix,iy=-1,-1 def draw_fig(event,x,y,f

我的问题是关于。 在上面的教程中,每当我们拖动鼠标指针时,都会绘制一个半径恒定的圆(即5像素)

我想画一个圆,半径等于鼠标左键拖动的距离。还希望在鼠标左键按下后移动鼠标指针时显示预览。类似于MS Paint中发生的情况

import cv2
import numpy as np

drawing=False
mode=True   # True--> Rectangle , False --> Circle

ix,iy=-1,-1

def draw_fig(event,x,y,flags,param):
    global ix,iy,drawing,mode,img

    if event==cv2.EVENT_LBUTTONDOWN:
        drawing=True
        ix,iy=x,y
        if(not mode):#ie. Drawing Mode==Circle
            backup=img

    elif event==cv2.EVENT_MOUSEMOVE:
        if (drawing):
            if(mode):
                cv2.rectangle(img,(ix,iy),(x,y),(255,0,0),-1)
            else:
                #Resetting Canvas
                #img=np.zeros((512,512,3),np.uint8)
                #cv2.putText(img,'Sankalp',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
                #Showing Circle Preview
                cv2.circle(backup,(x,y),max(abs(ix-x),abs(iy-y)),(0,0,255),-1)

    elif event==cv2.EVENT_LBUTTONUP:
        if(drawing):
            drawing=False
            if(mode):
                cv2.rectangle(img,(ix,iy),(x,y),(255,0,0),-1)
            else:
                #Resetting Canvas
                img=np.zeros((512,512,3),np.uint8)
                cv2.putText(img,'Sankalp',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
                #Showing Circle Preview
                cv2.circle(backup,(x,y),max(abs(ix-x),abs(iy-y)),(0,0,255),-1)
                img=backup

img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_fig)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'Sankalp',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

while(1):
    cv2.imshow('image',img)
    k=cv2.waitKey(1)
    if(k==ord('m')):
        mode=not mode
    elif k==27:
        break
    elif k==ord('r'):
        img=np.zeros((512,512,3),np.uint8)
        cv2.putText(img,'Sankalp',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

cv2.destroyAllWindows()
但它向我展示了一个错误:

UnboundLocalError:之前引用的局部变量“backup” 分配


有谁能告诉我我做错了什么以及实现这一点的其他方法吗?

备份
在两个
elif
块中都没有初始化。
备份
在两个
elif
块中都没有初始化。