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

如何用Python跟踪连续图像中骑车人膝盖方形标记的中心坐标?

跟踪膝盖方形标记并获取中心坐标的实现方案

针对你拥有的2000张连续图像(方形标记仅位置变化、形状固定),优先推荐使用OpenCV传统视觉方案(高效且无需训练),以下是具体实现路径:

一、OpenCV传统视觉方案

1. 颜色特征跟踪(标记与背景颜色差异大时首选)

利用标记的独特颜色提取目标,步骤如下:

  • 将图像转换为HSV颜色空间,通过调试确定标记的颜色范围,生成二值掩码
  • 用形态学操作(开运算)去除掩码中的噪声
  • 查找掩码轮廓,过滤出符合方形比例(宽高比接近1)且面积匹配的轮廓
  • 计算轮廓外接矩形的中心坐标

示例代码:

import cv2
import numpy as np

# 需提前调试确定标记的HSV范围(示例为红色系)
lower_hsv = np.array([0, 120, 70])
upper_hsv = np.array([10, 255, 255])

# 遍历所有图像路径(image_paths为你的图像路径列表)
for img_path in image_paths:
    img = cv2.imread(img_path)
    hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 生成颜色掩码
    mask = cv2.inRange(hsv_img, lower_hsv, upper_hsv)
    # 形态学去噪
    kernel = np.ones((3, 3), np.uint8)
    mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
    # 提取轮廓
    contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    for cnt in contours:
        x, y, w, h = cv2.boundingRect(cnt)
        # 过滤方形目标(宽高比阈值和面积阈值根据实际标记调整)
        if 0.9 < w/h < 1.1 and w > 20:
            center_x = x + w // 2
            center_y = y + h // 2
            print(f"图像 {img_path} 标记中心坐标:({center_x}, {center_y})")

2. 模板匹配跟踪(标记纹理/形状特征独特时使用)

因为标记形状固定,直接用第一帧的标记作为模板匹配后续帧:

  • 从第一帧图像中裁剪出标记作为模板(保存为灰度图)
  • 对每张图像执行模板匹配,取匹配度最高的区域
  • 计算匹配区域的中心坐标

示例代码:

import cv2
import numpy as np

# 加载预先裁剪好的标记模板(灰度图)
template = cv2.imread("template.jpg", 0)
tpl_w, tpl_h = template.shape[::-1]

for img_path in image_paths:
    img = cv2.imread(img_path)
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 执行模板匹配(TM_CCOEFF_NORMED为常用匹配方法)
    match_result = cv2.matchTemplate(gray_img, template, cv2.TM_CCOEFF_NORMED)
    # 获取匹配度最高的位置
    _, max_val, _, max_loc = cv2.minMaxLoc(match_result)
    # 计算中心坐标
    center_x = max_loc[0] + tpl_w // 2
    center_y = max_loc[1] + tpl_h // 2
    print(f"图像 {img_path} 标记中心坐标:({center_x}, {center_y})")

3. 稀疏光流跟踪(适合连续帧小幅度移动的目标)

在第一帧标记上提取特征点,后续帧跟踪特征点位置,计算平均坐标作为中心:

  • 第一帧中用goodFeaturesToTrack提取标记的角点特征
  • 用Lucas-Kanade光流算法跟踪特征点在后续帧的位置
  • 对跟踪到的特征点取平均,得到标记中心

二、深度学习方案(仅传统方法失效时考虑)

如果标记与背景干扰极强,传统方法无法有效区分,可使用TensorFlow训练轻量级目标检测模型:

  • 标注50-100张含标记的图像(标注bounding box)
  • 基于SSD MobileNet等轻量级模型进行训练
  • 用训练好的模型预测每张图像的标记位置,计算中心坐标

但针对你的场景,传统视觉方案完全满足需求,且开发成本低、运行速度快,优先选择上述OpenCV方法。

内容的提问来源于stack exchange,提问作者Joss Fres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:45:27