请问opencv这段代码有什么问题

这两天在学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会是带待选定的状态,多按一次回车才行,类似下图这样:

img


另外一种就是大小写的原因,ascii中,大写的Q和小写的q的ascii码是不一样的,所以会导致ord()的结果不一样。
你的代码我试了,正确情况下是可以退出的

退出了循环,没退出程序

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^