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

如何修改Python脚本实现物体与双IR相机的动态距离计算?

基于透视成像模型的距离计算修正方案

你前任助理的线性公式是小偏移场景下的近似简化(假设物体偏离中心的距离远小于12.5cm,此时直线距离≈垂直距离+偏移量),但当物体偏离较大时误差会明显增大。要适配任意位置的距离计算,需要基于小孔成像模型推导准确的逻辑。

第一步:明确关键参数

先确认以下核心参数(从相机手册获取或通过简单标定得到):

  • pixel_size:你给出的0.0264583333 cm(单像素的物理尺寸)
  • focal_length:相机的光学焦距(比如8mm焦距需转换为0.8cm,统一单位为cm)
  • center_x/center_y:两台相机画面的中心像素坐标(比如前置相机宽度为640像素,则center_x=320)

第二步:距离计算逻辑推导

假设相机光轴指向原“中心位置”(物体在光轴上时,到相机的垂直距离为12.5cm)。当物体偏离光轴时:

  1. 计算像素相对于中心的偏移量:dx = val_x - center_x(前置相机)、dy = val_2x - center_y(侧置相机)
  2. 计算偏移对应的视场角正切值:tanθ = (dx * pixel_size) / focal_length,θ为视线与光轴的夹角
  3. 若要计算物体到相机的直线距离:
    垂直距离(沿光轴)为12.5cm,直线距离为斜边,公式为:distance = 12.5 / math.cos(θ)
  4. 若物体在固定平面上移动(比如原中心所在的平面),直线距离也可简化为:distance = sqrt(12.5² + (dx*pixel_size)²)

第三步:Python函数实现

以计算直线距离为例,替换原固定值的代码:

import math

# 相机参数(根据实际情况修改)
PIXEL_SIZE = 0.0264583333  # cm
FOCAL_LENGTH = 0.8  # 示例:8mm焦距转cm
CENTER_X = 320  # 前置相机中心x像素
CENTER_Y = 240  # 侧置相机中心y像素

def calculate_distance(val, center_pixel):
    # val: 物体在画面中的像素位置
    # center_pixel: 对应相机的中心像素坐标
    dx = val - center_pixel
    tan_theta = abs(dx) * PIXEL_SIZE / FOCAL_LENGTH
    theta = math.atan(tan_theta)
    return 12.5 / math.cos(theta)

# 替换原代码中的距离计算
distance_back = calculate_distance(int(val_x), CENTER_X)
distance_side = calculate_distance(int(val_2x), CENTER_Y)

补充说明

如果你的最终目标是定位最高温区域的三维坐标,需要对两台相机做外参标定(确定它们的相对位置和姿态),然后通过三角测量联立两台相机的成像方程求解空间坐标,这是更精准的定位方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:45:28