使用OpenCV批量调整图片文件夹中图片尺寸并保存至新文件夹时的同名保存问题
解决批量调整图片尺寸并保留原文件名的问题
我明白你的困扰啦——现在代码里每次都把调整后的图片存成固定的image.jpg,自然会覆盖之前的文件,导致所有结果都是同一个名字。咱们只需要从原图片路径里提取出原文件名,再拼到目标文件夹路径里就能解决这个问题。
问题根源
你当前的cv2.imwrite路径是硬编码的固定值:
cv2.imwrite('Images_r/image.jpg' , imgResized)
不管处理哪张图,都往同一个文件里写,所以最后只剩最后一张图的内容。
修改后的完整代码
import cv2 import glob import os inputFolder = 'Images' outputFolder = 'Images_r' # 先创建目标文件夹(如果不存在的话) if not os.path.exists(outputFolder): os.makedirs(outputFolder) # 遍历输入文件夹里的jpg图片(可改成*.png/*.jpeg支持更多格式) for img_path in glob.glob(os.path.join(inputFolder, "*.jpg")): # 读取图片,增加异常判断避免崩溃 image = cv2.imread(img_path) if image is None: print(f"无法读取图片: {img_path}") continue # 调整尺寸 imgResized = cv2.resize(image, (300, 400)) # 提取原文件名(比如从"Images/test.jpg"得到"test.jpg") img_filename = os.path.basename(img_path) # 拼接目标文件路径,兼容不同系统的路径分隔符 output_path = os.path.join(outputFolder, img_filename) # 保存调整后的图片 cv2.imwrite(output_path, imgResized) print(f"已保存: {output_path}")
关键细节说明
- 使用
os.path.join()拼接路径:自动适配Windows的\和Linux/macOS的/,让代码跨平台通用。 os.path.basename(img_path):无需手动拆分字符串,直接从完整路径里提取可靠的原文件名。- 提前创建目标文件夹:如果
Images_r不存在,cv2.imwrite会保存失败,所以用os.makedirs()提前创建(加判断避免重复创建报错)。 - 增加图片读取校验:遇到损坏或路径错误的图片会跳过并提示,避免程序中途崩溃。
这样运行后,Images_r文件夹里就会和原Images文件夹一一对应,每张调整后的图片都保留原文件名啦~
内容的提问来源于stack exchange,提问作者Zahin Fyz
相关产品推荐
相关产品推荐

