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

Python如何获取bbox对应区域[0-255]范围内的像素矩阵值

目标检测bbox区域像素提取代码修正

现有代码的核心问题

  • 索引顺序错误:numpy读取PIL图像得到的数组维度顺序为(高度, 宽度, 通道数),第一个维度对应Y轴(垂直方向),第二个维度对应X轴(水平方向),原代码写反了X/Y的索引顺序,会裁剪到错误区域
  • 批量坐标处理错误:df.iloc[0:, 1]会取出所有行的xmin值,直接用int()转换会报错,需要遍历每一行拿到单个bbox的坐标
  • 缺少边界校验:未对坐标做合法性限制,可能出现坐标为负、超出图像尺寸的情况,导致异常

修正后代码

import glob
import numpy as np
import pandas as pd
from PIL import Image

# 提前读取存储bbox的DataFrame
# df = pd.read_csv("你的标注文件路径.csv")

# 匹配所有需要处理的图像,示例匹配目录下所有JPG文件
path = glob.glob("./**/*.JPG", recursive=True)

for img_path in path:
    imgs = Image.open(img_path).convert('RGB')
    image_width, image_height = imgs.size
    # 此处得到的数组默认就是uint8类型,取值范围天然为0-255
    imgArrays = np.array(imgs)
    
    # 遍历每个bbox单独处理
    for idx, row in df.iterrows():
        # 计算绝对坐标同时做边界限制,避免越界
        X1 = max(0, int(row[1] * image_width))  # xmin
        Y1 = max(0, int(row[2] * image_height)) # ymin
        X2 = min(image_width, int(row[3] * image_width))  # xmax
        Y2 = min(image_height, int(row[4] * image_height)) # ymax
        
        # 修正索引顺序:先取Y轴范围,再取X轴范围
        cropped_image = imgArrays[Y1:Y2, X1:X2]
        
        # 此处可添加后续处理逻辑,如存储像素值、保存裁剪区域等

内容的提问来源于stack exchange,提问作者Samah wa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:09:01