You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求为图片矩形标注脚本添加批量处理循环

批量在图片上绘制特征矩形的脚本优化方案

咱们先从基础准备工作入手,先导入依赖库、读取坐标数据,再拆分那些挤在同一列的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 10:07:51