Files
prehadler/扩大边缘像素.py
2025-10-10 11:39:23 +08:00

65 lines
1.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("处理完成!")