在Python OpenCV中使用鼠标绘制变半径圆
我的问题是关于。 在上面的教程中,每当我们拖动鼠标指针时,都会绘制一个半径恒定的圆(即5像素) 我想画一个圆,半径等于鼠标左键拖动的距离。还希望在鼠标左键按下后移动鼠标指针时显示预览。类似于MS Paint中发生的情况在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
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
块中都没有初始化。