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
相关产品推荐
相关产品推荐

