人脸Bounding Box放大函数异常:基于face_recognition的坐标处理问题
问题分析与修正方案
你的代码逻辑完全搞反了,当前计算是在缩小Bounding Box,而非放大。要按比例放大框,得基于原框的宽高计算扩展量,而非直接对坐标乘因子。
正确思路
原框高度为 b - t,宽度为 r - l。要实现对称放大(保持框中心不变):
- top 向上移动:
t - 扩展高度 - bottom 向下移动:
b + 扩展高度 - left 向左移动:
l - 扩展宽度 - right 向右移动:
r + 扩展宽度
其中扩展高度 = (b - t) * EXPANDING_FACTOR / 2,扩展宽度 = (r - l) * EXPANDING_FACTOR / 2,确保上下左右均匀扩展。
修正后的代码
EXPANDING_FACTOR = 0.75 # 扩展比例,0.75表示在原框基础上向外扩展75%的宽高 def enlarge_bounding_box(t, r, b, l): """ 按比例放大人脸Bounding Box,保持中心不变 """ # 计算原框的宽高 height = b - t width = r - l # 计算上下左右的对称扩展量 expand_top_bottom = int(height * EXPANDING_FACTOR / 2) expand_left_right = int(width * EXPANDING_FACTOR / 2) # 计算新坐标 new_t = t - expand_top_bottom new_r = r + expand_left_right new_b = b + expand_top_bottom new_l = l - expand_left_right # 防止坐标超出图像左/上边界(若需限制右/下边界,可传入图像宽高后补充判断) new_t = max(0, new_t) new_l = max(0, new_l) return new_t, new_r, new_b, new_l
原代码错误原因
原代码中 t = int(t - EXPANDING_FACTOR * t) 等价于 t = t * 0.25,这会让top坐标向上偏移但幅度基于原坐标值而非框高;right坐标计算为 r * 0.25 会直接向左收缩,最终结果是把框大幅缩小,完全不符合放大需求。
内容的提问来源于stack exchange,提问作者sekicdx
相关产品推荐
相关产品推荐

