Python OpenCV如何将加边界框的图片保存到已存在的Augmented目录
实现方案
你现有代码已经完成了目录创建、图片遍历、边界框绘制的基础逻辑,只需要补全路径拼接与写入逻辑即可完成保存,同时可以修复原代码里几个易引发错误的写法:
- 原代码反复调用
os.chdir()切换工作目录、硬编码字符串长度截取路径的写法兼容性极差,不同运行环境下很容易出现路径读取错误,直接用os.path.join()拼接路径更稳妥 - 原代码中
cv2.rectangle()的坐标点顺序写反,该接口要求传入的第一个坐标为矩形左上角点、第二个为右下角点,否则绘制的边框位置会出错 - 原代码导入了未使用的PIL库,属于冗余导入可直接删除
补全后的可运行代码
import os import cv2 SAVE_DIR_NAME = "Augmented" # 初始化保存目录 if not os.path.isdir(SAVE_DIR_NAME): os.mkdir(SAVE_DIR_NAME) # 定义支持的图片格式 SUPPORT_EXT = {".jpg", ".jpeg", ".png"} # 遍历当前目录筛选待处理图片 current_dir = os.getcwd() all_files = os.listdir(current_dir) img_list = [f for f in all_files if os.path.splitext(f)[1].lower() in SUPPORT_EXT] for img_name in img_list: # 读取原图 raw_img = cv2.imread(img_name) # 绘制边界框,坐标可根据实际需求调整 img_with_bbox = cv2.rectangle(raw_img, (45, 43), (234, 256), (0, 0, 255), 2) # 拼接目标保存路径 save_target_path = os.path.join(SAVE_DIR_NAME, img_name) # 写入处理后的图片到Augmented目录 cv2.imwrite(save_target_path, img_with_bbox) # 预览逻辑,不需要可直接注释删除 cv2.imshow("Processed Preview", img_with_bbox) # 按q键退出预览,按其余任意键切换到下一张 press_key = cv2.waitKey(0) if press_key == ord("q"): break cv2.destroyAllWindows()
核心保存逻辑说明
- 保存操作核心调用
cv2.imwrite()接口,第一个参数传入处理后图片的完整目标路径,第二个参数传入绘制完边界框的图像对象即可完成写入 - 用
os.path.join()拼接目录和文件名,自动适配不同操作系统的路径分隔符,不会出现路径格式错误 - 如果需要统一保存为指定格式(比如全部存为jpg),只需要在拼接保存路径时替换后缀名即可,注意要匹配
cv2.imwrite()支持的编码格式
内容的提问来源于stack exchange,提问作者Ankit Bista
相关产品推荐
相关产品推荐

