如何将文件图像保存为原始名称
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】:
您出现错误的原因是因为glob
和os.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)
【讨论】:
以上是关于如何将文件图像保存为原始名称的主要内容,如果未能解决你的问题,请参考以下文章