从图片中提取网格宽高像素

This commit is contained in:
liyubo 2026-03-11 17:20:50 +08:00
parent 53b9830968
commit 5b18b592d0

View File

@ -23,6 +23,7 @@ GRID_WIDTH = 108 # 网格像素宽
GRID_HEIGHT = 102 # 网格像素高
COVER_RATIO = 0.01 # mask 覆盖比例阈值
RESERVED_CELL_NUM = 20 # 道路灾害格子过滤掉两侧数据只保留每行中间20个格子
ROAD_RECOGNIZE_HEIGHT = 2 # 每两米一张照片
# ---------------- 路面类别映射 ----------------
CLASS_MAP_ASPHALT = {
@ -558,12 +559,14 @@ def format_number_to_k_code(number):
# ---------------- 主函数-共享目录 ----------------
def process_dir(road_dict,pile_dict,dir="output",cell_area=CELL_AREA,cell_width=CELL_WIDTH,cell_height=CELL_HEIGHT,grid_width=GRID_WIDTH,grid_height=GRID_HEIGHT):
os.makedirs(dir,exist_ok=True)
# 网格像素宽
# 识别宽度(米)
road_recognize_width = road_dict.get('识别宽度(米)', 3.6)
grid_width = round(4096 * CELL_WIDTH / road_recognize_width)
# 道路灾害格子过滤掉两侧数据只保留每行中间20个格子
cell_index_start = round((road_recognize_width / CELL_WIDTH - RESERVED_CELL_NUM) / 2)
cell_index_end = cell_index_start + RESERVED_CELL_NUM
road_recognize_height = ROAD_RECOGNIZE_HEIGHT
grid_width = None
grid_height = None
cell_index_start = None
cell_index_end = None
# 解压
# 读取桩号映射
# 遍历图片
@ -577,7 +580,22 @@ def process_dir(road_dict,pile_dict,dir="output",cell_area=CELL_AREA,cell_width=
if not os.path.exists(label_file):
print(f"⚠️ 找不到标签: {label_file}")
continue
out_txt, class_cells, road_type, all_cell_num = yoloseg_to_grid_share_dir(road_dict,pile_dict,image_path,label_file,cell_index_start,cell_index_end,grid_width=grid_width)
# 读取图片并计算宽高像素点
if grid_width is None or grid_height is None :
img = cv2.imread(image_path)
if img is not None :
h, w = img.shape[:2]
# 网格像素宽高
grid_width = round(w * CELL_WIDTH / road_recognize_width)
grid_height = round(h * CELL_WIDTH / road_recognize_height)
print(f"通过图片获取到grid_width = {grid_width}, grid_height = {grid_height}")
# 道路灾害格子过滤掉两侧数据只保留每行中间20个格子
cell_index_start = round((road_recognize_width / CELL_WIDTH - RESERVED_CELL_NUM) / 2)
cell_index_end = cell_index_start + RESERVED_CELL_NUM
out_txt, class_cells, road_type, all_cell_num = yoloseg_to_grid_share_dir(
road_dict,pile_dict,image_path,label_file,cell_index_start,cell_index_end,grid_width=grid_width,grid_height=grid_height)
# 写每张图独立 _grid.txt
grid_txt_path = os.path.splitext(image_path)[0]+"_grid.txt"
with open(grid_txt_path,'w',encoding='utf-8') as f:
@ -996,6 +1014,26 @@ if __name__=="__main__":
# calc_cell_area, calc_grid_width, calc_grid_height = calc_grid_param(2048, 4096, 3.6, 2)
# print(f"calc_cell_area={calc_cell_area}, calc_grid_width={calc_grid_width}, calc_grid_height={calc_grid_height}")
image_path = r"D:\devForBdzlWork\ai-train_platform\predictions\C005500155A\20250515-075419-696.jpg"
road_recognize_width = 3.6
road_recognize_height = 2
grid_width = None
grid_height = None
cell_index_start = None
cell_index_end = None
# 读取图片并计算宽高像素点
if grid_width is None or grid_height is None :
img = cv2.imread(image_path)
if img is not None :
h, w = img.shape[:2]
# 网格像素宽高
grid_width = round(w * CELL_WIDTH / road_recognize_width)
grid_height = round(h * CELL_WIDTH / road_recognize_height)
print(f"通过图片获取到grid_width = {grid_width}, grid_height = {grid_height}")
# 道路灾害格子过滤掉两侧数据只保留每行中间20个格子
cell_index_start = round((road_recognize_width / CELL_WIDTH - RESERVED_CELL_NUM) / 2)
cell_index_end = cell_index_start + RESERVED_CELL_NUM
output_dir = "D:/devForBdzlWork/ai-train_platform/predictions/jlp/C006500107A"
pile_dict = get_pile_dict(output_dir)
road_dict = get_road_dict(output_dir)