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

如何使用cv2.imread读取多张图像并绘制边界框(无需重复写路径)

批量读取图像并绘制边界框(无需重复写路径)

嘿,这个需求其实很容易实现,你已经找对了核心思路——把图像路径和对应的边界框数据打包在一起,这样遍历的时候就能一次性获取所有需要的信息,不用重复写路径啦。我帮你把代码补全并解释清楚:

首先,我们需要导入必要的库:

import cv2
import numpy as np

然后定义你的图像路径与边界框的对应列表(你已经写好这部分啦):

# 列表中的每个元素是(图像路径, 该图像对应的边界框数组)
images = [
    ("images/audrey.jpg", np.array([
        (12, 84, 140, 212), (24, 84, 152, 212), (36, 84, 164, 212),
        (12, 96, 140, 224), (24, 96, 152, 224), (24, 108, 152, 236)
    ])),
    ("images/bksomels.jpg", np.array([
        (114, 60, 178, 124), (120, 60, 184, 124), (114, 66, 178, 130)
    ])),
    ("images/gpripe.jpg", np.array([
        (12, 30, 76, 94), (12, 36, 76, 100), (72, 36, 200, 164), (84, 48, 212, 176)
    ]))
]

接下来是核心的遍历与绘制逻辑:

# 遍历每张图像及其边界框
for (imagePath, boundingBoxes) in images:
    # 加载图像并创建副本(保留原图,避免绘制时修改原图)
    print(f"[x] {len(boundingBoxes)} initial bounding boxes")
    image = cv2.imread(imagePath)
    orig = image.copy()  # 原图副本,可选保留
    
    # 遍历当前图像的所有边界框
    for (x1, y1, x2, y2) in boundingBoxes:
        # 在图像上绘制红色边界框(OpenCV中颜色是BGR格式,所以红色是(0,0,255))
        # 参数:图像、左上角坐标、右下角坐标、颜色、线条粗细
        cv2.rectangle(image, (x1, y1), (x2, y2), (0, 0, 255), 2)
    
    # 显示处理后的图像(可选)
    cv2.imshow(f"Processed: {imagePath}", image)
    # 等待用户按下任意键后关闭窗口
    cv2.waitKey(0)
    # 保存处理后的图像到指定路径(可选,比如在原路径后加"_boxed")
    outputPath = imagePath.replace(".jpg", "_boxed.jpg")
    cv2.imwrite(outputPath, image)

# 所有窗口处理完成后,销毁所有OpenCV窗口
cv2.destroyAllWindows()

关键细节说明:

  • 避免重复写路径:通过把路径和边界框打包成元组存入列表,遍历的时候直接取出路径,不需要在代码里多次写cv2.imread("xxx.jpg")
  • 边界框绘制:cv2.rectangle的参数要注意:图像对象、左上角(x1,y1)、右下角(x2,y2)、BGR颜色、线条粗细。这里用红色(0,0,255)是因为OpenCV默认用BGR色彩空间
  • 保留原图:orig = image.copy()可以保留原始图像,如果你需要对比原图和绘制后的图像,这个步骤很有用
  • 可选操作:代码里的显示图像和保存图像都是可选的,你可以根据需求选择保留哪部分

内容的提问来源于stack exchange,提问作者Gian Feliciano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:52:35