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

该博客介绍了如何利用OpenCV库在Python中定义鼠标事件,实现图像上的点标记功能。通过`cv.setMouseCallback`设置回调函数,当鼠标左键点击时在图像上绘制圆圈,记录点击坐标。用户可以通过Enter键确认标记,Esc键跳过,其他键重试。`SetPoints`函数用于打开图片窗口并进行点标记,返回标记点的坐标字符串。
摘要由CSDN通过智能技术生成
  • 定义鼠标事件,用于获取鼠标点击信息

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

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)
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值