a='0' #a表示用户选择的图形 1--矩形 2--圆形
startpos=(0,0) #用元祖表示左键击下的初始坐标
def draw_shape(event,x,y,flags,param): #创建回调函数
global a,startpos
# 声明全局变量
if event == cv.EVENT_LBUTTONDOWN : #左键击下
startpos=(x,y)
elif event ==cv. EVENT_MOUSEMOVE: #鼠标移动
if a=='1':
cv.rectangle(img,startpos,(x,y),(0,255,0),3)
elif a=='2':
m=x-startpos[0]
n=y-startpos[1]
r=(m**2+n**2)**0.5
cv.circle(img, startpos, r, (0, 0, 255), -1)
img = np.zeros((512,512,3), np.uint8) #黑色图像
cv.namedWindow('image')
cv.setMouseCallback('image',draw_shape)
while(1):
cv.imshow('image',img)
if cv.waitKey(20)=='1':
a='1'
elif cv.waitKey(20)=='2':
a='2'
画不上图形
修改:
终点坐标弄成左键弹起,不是鼠标移动
整数除以2可能会存在有小数
a='0' #a表示用户选择的图形 1--矩形 2--圆形
startpos=(0,0) #用元祖表示左键击下的初始坐标
def draw_shape(event,x,y,flags,param): #创建回调函数
global a,startpos
# 声明全局变量
if event == cv.EVENT_LBUTTONDOWN : #左键击下
startpos=(x,y)
elif event ==cv. EVENT_LBUTTONUP: #左键弹起
if a=='1':
cv.rectangle(img,startpos,(x,y),(0,255,0),3)
elif a=='2':
m=x-startpos[0]
n=y-startpos[1]
r=int((m**2+n**2)**0.5)
cv.circle(img, startpos, r, (0, 0, 255), -1)
img = np.zeros((512,512,3), np.uint8) #黑色图像
cv.namedWindow('image')
cv.setMouseCallback('image',draw_shape)
while(1):
cv.imshow('image',img)
k=cv.waitKey(20)
if k==ord('1'):
a='1'
elif k==ord('2'):
a='2'
elif k==ord('q'):
break
点的情况,半个像素无法处理,必须将r转化成整数int型。