请求为图片矩形标注脚本添加批量处理循环
批量在图片上绘制特征矩形的脚本优化方案
咱们先从基础准备工作入手,先导入依赖库、读取坐标数据,再拆分那些挤在同一列的x/y/r像素坐标:
import os import numpy as np import pandas as pd from PIL import Image, ImageDraw import glob import re # 读取存储坐标的Excel文件 xeno_data = r'C:\file_path\data.xlsx' ss = pd.read_excel(xeno_data) # 拆分同一列中的x/y/r坐标 FandC = [] for index, row in ss.iterrows(): filename = row['filename'] coords = row['xyr_coords'] # 用正则提取数字(支持小数格式) x, y, r = re.findall(r'[0-9.]+', coords) print(f'DEBUG: filename={filename}, x={x}, y={y}, r={r}') FandC.append({'filename': filename, 'x': x, 'y': y, 'r': r}) # 整理成DataFrame方便后续筛选处理 fandc = pd.DataFrame(FandC)
接下来是核心的批量处理逻辑——咱们要遍历DataFrame里所有的唯一文件名,对每张图片依次完成加载、坐标匹配、矩形绘制和保存操作:
# 获取所有不重复的图片文件名 unique_filenames = fandc['filename'].unique() # 遍历每个文件名,批量处理图片 for filename in unique_filenames: # 过滤出当前图片对应的所有坐标数据 current_img_data = fandc[fandc['filename'] == filename] # 加载目标图片,处理可能的文件不存在情况 try: im = Image.open(filename).convert('RGBA') except FileNotFoundError: print(f"警告:未找到图片 {filename},跳过该文件") continue # 创建透明叠加层用于绘制矩形(不直接修改原图) overlay = Image.new('RGBA', im.size) draw = ImageDraw.Draw(overlay) # 遍历当前图片的所有坐标,绘制红色半透明矩形 for _, row in current_img_data.iterrows(): x = float(row['x']) y = float(row['y']) r = float(row['r']) # 计算矩形的左上角和右下角坐标 left_top = (x - r, y - r) right_bottom = (x + r, y + r) # fill参数:前三个是RGB值,最后一个是透明度(0-255,值越小越透明) draw.rectangle([left_top, right_bottom], fill=(255, 0, 0, 55)) # 合并原图与叠加层,转换为RGB格式以兼容JPG保存 final_img = Image.alpha_composite(im, overlay) final_img = final_img.convert("RGB") # 保存处理后的图片,这里给文件名加前缀区分原图,可自定义规则 save_name = f"marked_{filename}" final_img.save(save_name) print(f"已完成 {filename} 的处理,保存为 {save_name}")
小细节说明:
- 我加了
try-except块处理图片找不到的情况,避免脚本中途崩溃 - 保存时给处理后的图片加了
marked_前缀,你也可以改成自定义的保存路径或命名规则 - 矩形的颜色和透明度可以通过修改
fill=(255,0,0,55)调整,前三个数值对应RGB颜色,最后一个是Alpha透明度
内容的提问来源于stack exchange,提问作者CephaloRhod
相关产品推荐
相关产品推荐

