Python opencv:当按下某个键时,在图像上绘制一个圆圈

时间:2017-06-17 16:54:08

标签: python opencv numpy

我想按键盘上的一个字母画一个圆圈,但是只有当鼠标移动时才会画圆圈。

`import cv2
import numpy as np
mode = True 
ix,iy = -1,-1
def draw_circle(event,x,y,flags,param):
global ix,iy,mode
    if cv2.waitKey(1) == ord('r'):
        cv2.circle(img,(x,y),18,(255,0,0),-1)

img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(1) & 0xFF
    if k == ord('m'):
        mode = not mode
    elif k == 27:
        break
cv2.destroyAllWindows()`

非常感谢!!!

1 个答案:

答案 0 :(得分:1)

首先,你有几个错误。绘制圆圈设置为鼠标回调。当鼠标移动,点击等时,它会调用该功能。如果您的目标是创建鼠标当前所在的圆圈,则可以将鼠标回调更改为仅在每次移动或单击时记录鼠标的位置。然后,当你检查是否点击 m 时,将绘制圆圈称为此位置。此外,我建议10毫秒等待,如果不是它可能没有按下按键(它发生在我身上)所以你必须多次击中它。我没有测试过这段代码,但它可能是正确的:)我希望它可以帮到你。

import cv2
import numpy as np

ix,iy = -1,-1
def set_mouse_position(event,x,y,flags,param):
    global ix,iy
    ix,iy = x,y 

img = np.zeros((512,512,3), np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',set_mouse_position)

while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(10) & 0xFF
    if k == ord('m'):
        cv2.circle(img,(ix,iy),18,(0,0,0),-1)
    elif k == 27:
        break
cv2.destroyAllWindows()