如何将文件图像保存为原始名称

Posted

技术标签:

【中文标题】如何将文件图像保存为原始名称【英文标题】:how to save file image as original name 【发布时间】:2019-05-19 20:48:33 【问题描述】:

我想使用图像的原始名称保存输出图像。

我尝试了这段代码,但大多数情况下运行良好,一半保存了其他文件名。如何做得更好?

cropped_images = "GrabCut"

if not os.path.exists(cropped_images):
    os.makedirs(cropped_images)

# Load data
filepath = "Data"
images = [cv2.imread(file) for file in glob.glob(filepath + "/*.jpg")]

file_names = []
for filename in os.listdir(filepath):
    org_image_name = os.path.splitext(filename)[0]
    file_names.append(org_image_name)

for i, image in enumerate(images):
    DO SOMETHING...

    img_name = file_names[i]
    cropped_images_path = os.path.join(cropped_images, img_name + '.jpg')

    cv2.imwrite(cropped_images_path, image)

【问题讨论】:

不知道python是否按顺序进行收集,但最简单的解决方案是存储glob()的输出,然后在最后一个for循环中将输出与图像一起索引。 @Croolman 谢谢,但是如何在这段代码中非常简单? 【参考方案1】:

您出现错误的原因是因为globos.listdir 制作的列表不一样,或者不同的文件(glob 只获取jpg 文件和listdir 获取所有内容)或不同的顺序,或两者。您可以更改列表 orig_files 中的文件名,以创建对应的新文件名列表 new_files

看起来一次只读取一张图像更有意义(一次只能使用一张)所以我将它移到循环中。您还可以使用os.path.basename 获取文件名,并使用zip 一起遍历多个列表。

cropped_images = "GrabCut"

if not os.path.exists(cropped_images):
    os.makedirs(cropped_images)

# Load data
filepath = "Data"
orig_files = [file for file in glob.glob(filepath+"/*.jpg")]
new_files = [os.path.join(cropped_images, os.path.basename(f)) for f in orig_files]

for orig_f,new_f in zip(orig_files,new_files):
    image = cv2.imread(orig_f)

    DO SOMETHING...

    cv2.imwrite(new_f, image)

【讨论】:

以上是关于如何将文件图像保存为原始名称的主要内容,如果未能解决你的问题,请参考以下文章

如何在上传过程中重命名图像文件

如何使用原始文件名保存裁剪的图像?

如何将照片库中的图像保存到应用程序的文档文件夹

如何保存为新文件并继续处理Vim中的原始文件?

如何将图像上的绘图线保存为 .mat 文件

如何将图片从图片库保存到应用程序的文档文件夹中