You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV中如何计算连续点击的坐标点之间的相邻两点直线距离

实现方案

核心修改逻辑

  • 新增全局列表存储所有左键点击的坐标点
  • 每次点击左键新增点位后,若列表中存在至少2个点,自动取最后两个相邻点计算欧式距离
  • 支持将距离同时打印到控制台、绘制到图片两点中间位置
import cv2
import math

# 存储所有左键点击的坐标
points = []

# 打印所有CV2事件名称,不需要可以注释删掉
[print(i) for i in dir(cv2) if 'EVENT' in i]

def click_event(event, x, y, flags, params):
    global points
    # 左键点击:存坐标、打印、计算相邻距离
    if event == cv2.EVENT_LBUTTONDOWN:
        # 新增当前点位到列表
        points.append((x, y))
        # 控制台打印坐标
        print(f"当前点位坐标:({x}, {y})")

        # 绘制坐标到图片
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img, f"{x},{y}", (x, y), font, 1, (255, 0, 0), 2)

        # 存在至少两个点时计算相邻距离
        if len(points) >= 2:
            p1 = points[-2]
            p2 = points[-1]
            # 计算欧式距离
            distance = math.hypot(p2[0] - p1[0], p2[1] - p1[1])
            # 控制台打印距离,保留2位小数
            print(f"第{len(points)-1}段相邻距离:{distance:.2f}")
            # 绘制距离到两点中间位置
            mid_x = (p1[0] + p2[0]) // 2
            mid_y = (p1[1] + p2[1]) // 2
            cv2.putText(img, f"{distance:.2f}", (mid_x, mid_y), font, 0.8, (0, 0, 255), 2)
            # 可选:两点之间画连线,更直观
            cv2.line(img, p1, p2, (0, 255, 0), 2)

        cv2.imshow('image', img)

    # 右键点击:显示BGR像素值,保留原有功能
    if event == cv2.EVENT_RBUTTONDOWN:
        print(f"当前点位BGR值:({img[y,x,0]}, {img[y,x,1]}, {img[y,x,2]})")
        font = cv2.FONT_HERSHEY_SIMPLEX
        b = img[y, x, 0]
        g = img[y, x, 1]
        r = img[y, x, 2]
        cv2.putText(img, f"{b},{g},{r}", (x, y), font, 1, (255, 255, 0), 2)
        cv2.imshow('image', img)


if __name__ == "__main__":
    # 读取图片,注意修改为自己的图片路径
    img = cv2.imread('shirt.jpg', 1)
    img = cv2.resize(img, (0, 0), None, 0.2, 0.2)

    cv2.imshow('image', img)
    cv2.setMouseCallback('image', click_event)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

可选调整项

  • 不需要两点之间的绿色连线可以删除cv2.line那行代码
  • 距离的显示位置、字体大小、颜色可以自行修改cv2.putText的对应参数
  • 若需要重置所有点位,可新增键盘监听,比如按下c键清空points列表和重置图片即可

内容的提问来源于stack exchange,提问作者Yudhisteer Chintaram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:48:02