如何用JavaScript从固定相机测量已知身高站立者的距离
解决方案与建议
一、基于截距定理的核心计算方案
当相机处于90°垂直视角(镜头光轴与地面垂直,被测者站立于地面)时,完全可以通过截距定理(相似三角形原理)计算相机到人员的距离,具体步骤如下:
- 收集关键参数
- 被测者实际身高:记为
H(单位统一为米/厘米) - 从拍摄图像中提取被测者的像素高度:记为
h(单位:像素,即头顶到脚底的像素差值) - 相机焦距:记为
f(单位:像素,需通过相机参数或标定获取)
- 被测者实际身高:记为
- 距离计算公式
根据相似三角形比例关系,距离D的推导公式为:
焦距D = (H * f) / hf的获取方式:- 若浏览器支持,可通过
MediaDevicesAPI读取相机内置参数; - 若无法直接获取,可做一次标定:让已知身高的人站在已知距离
D_known处拍摄,代入公式反推f = (h * D_known) / H。
- 若浏览器支持,可通过
- 浏览器应用落地
在现有应用中补充像素高度检测逻辑:- 引入OpenCV.js实现人体关键点自动检测(识别头顶、脚底坐标计算
h); - 简化方案:让用户手动标记图像中的头顶和脚底位置,直接计算像素高度差值。
- 引入OpenCV.js实现人体关键点自动检测(识别头顶、脚底坐标计算
二、简化测量操作的建议
- 预设地面标记:在相机前方地面标注多条已知距离的刻度线(如1米、2米、3米),让被测者站在标记线上完成一次标定,后续无需重复校准即可直接计算未知距离;也可划定固定站立区域,减少被测者姿态偏移对测量的影响。
- 固定相机姿态:将相机固定在稳定支架上,保持90°垂直视角不变,避免因相机倾斜破坏相似三角形的应用前提。
- 添加参考物:在拍摄画面中放置一个已知尺寸的参考物(如固定高度的标尺),与被测者同框拍摄,既能辅助校准像素高度,也可用于实时修正焦距偏差。
内容的提问来源于stack exchange,提问作者SimonS
相关产品推荐
相关产品推荐

