Files
prehadler/扩大边缘像素.py

65 lines
1.7 KiB
Python
Raw Permalink Normal View History

2025-10-10 11:39:23 +08:00
import os
def expand_bbox(label_path, k=1.1):
"""
扩大YOLO标签的边界框
:param label_path: 标签文件路径.txt
:param k: 扩大系数k>1
"""
with open(label_path, 'r') as f:
lines = f.readlines()
new_lines = []
for line in lines:
line = line.strip()
if not line:
continue
# 解析标签
class_id, xc, yc, w, h = line.split()
xc = float(xc)
yc = float(yc)
w = float(w)
h = float(h)
# 计算新宽高
new_w = w * k
new_h = h * k
# 计算边界
x1 = xc - new_w / 2
y1 = yc - new_h / 2
x2 = xc + new_w / 2
y2 = yc + new_h / 2
# 截断超出图像的部分0~1范围
x1 = max(0.0, x1)
y1 = max(0.0, y1)
x2 = min(1.0, x2)
y2 = min(1.0, y2)
# 重新计算中心和宽高
new_xc = (x1 + x2) / 2
new_yc = (y1 + y2) / 2
new_w = x2 - x1
new_h = y2 - y1
# 保留6位小数拼接新标签
new_line = f"{class_id} {new_xc:.6f} {new_yc:.6f} {new_w:.6f} {new_h:.6f}\n"
new_lines.append(new_line)
# 写入新标签(覆盖原文件,或改为新路径)
with open(label_path, 'w') as f:
f.writelines(new_lines)
# 批量处理文件夹中的所有标签
label_dir = r"D:\DataPreHandler\yuanshi_data\images\val\labels" # 替换为你的标签文件夹路径
k = 1.25 # 扩大系数,根据需求调整
for filename in os.listdir(label_dir):
if filename.endswith('.txt'):
label_path = os.path.join(label_dir, filename)
expand_bbox(label_path, k)
print("处理完成!")