OpenCV-python 用鼠标在图片上标记位置并返回坐标

  • 定义鼠标事件,用于获取鼠标点击信息

还有其他的触发,例如移动,双击,还可以设置按下去的时候还是弹起来的时候。

cv.setMouseCallback(windowname, onMouse)
def onMouse(event, args[], flags, param)

  • 画圈,在点击的地方画圈

cv.circle(temp_img, (x, y), 10, (102, 217, 239), -1)

  • 关闭图片窗口

cv.destroyAllWindows()

def SetPoints(windowname, img):
    """
    输入图片,打开该图片进行标记点,返回的是标记的几个点的字符串
    """
    print('(提示:单击需要标记的坐标,Enter确定,Esc跳过,其它重试。)')
    points = []

    def onMouse(event, x, y, flags, param):
        if event == cv.EVENT_LBUTTONDOWN:
            cv.circle(temp_img, (x, y), 10, (102, 217, 239), -1)
            points.append([x, y])
            cv.imshow(windowname, temp_img)

    temp_img = img.copy()
    cv.namedWindow(windowname)
    cv.imshow(windowname, temp_img)
    cv.setMouseCallback(windowname, onMouse)
    key = cv.waitKey(0)
    if key == 13:  # Enter
        print('坐标为:', points)
        del temp_img
        cv.destroyAllWindows()
        return str(points)
    elif key == 27:  # ESC
        print('跳过该张图片')
        del temp_img
        cv.destroyAllWindows()
        return
    else:
        print('重试!')
        return SetPoints(windowname, img)

你可能感兴趣的:(OpenCV,1024程序员节)