这两天在学opencv,跟着下面网址学到7.2部分,写代码出现了点问题:画圆画矩形画的出,切换画图模式也还可以,但是为什么按q键没有退出,可能因为我的代码能力比较差,没看出问题,麻烦dl们解答一下,非常感谢!!
网址:https://www.cnblogs.com/Undo-self-blog/p/8424056.html
代码:
#拖动鼠标绘制矩形或圆形
import cv2
import numpy as np
drawing=False
ix,iy=-1,-1
mode=True
#模式切换开关,True时画矩形,否则画圆形
def draw(event,x,y,flags,param):
global ix,iy,drawing,mode
if event==cv2.EVENT_LBUTTONDBLCLK:
drawing=True
ix,iy=x,y
elif event==cv2.EVENT_MOUSEMOVE and flags==cv2.EVENT_FLAG_LBUTTON:
if drawing==True:
if mode==True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
r=int(np.sqrt((x-ix)**2+(y-iy)**2))
cv2.circle(img,(ix,iy),r,(0,0,255),-1)
elif event==cv2.EVENT_LBUTTONUP:
drawing=False
if mode==True:
cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)
else:
r=int(np.sqrt((x-ix)**2+(y-iy)**2))
cv2.circle(img,(ix,iy),r,(0,0,255),-1)
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw)
while(1):
cv2.imshow('image',img)
k=cv2.waitKey(20)&0xFF
if k==ord('m'):
mode=not mode
#按键是m则切换绘图模式
elif k==ord('q'):
break
#按键是q则退出
应该是你没按进去,比如搜狗输入法之类的,你按完q会是带待选定的状态,多按一次回车才行,类似下图这样:
退出了循环,没退出程序
不知道你这个问题是否已经解决, 如果还没有解决的话: