我在一个包含特定颜色的文件夹中搜索图片。我可以绘制这些图片,但无法找出如何获取文件名列表。我怀疑我的问题可能有一个简单的解决方案,那就是:如何从匹配特定颜色的图片中获取文件名?
这是我正在做的事情:
IMAGE_DIRECTORY = 'path'COLORS = { 'GREEN': [0, 128, 0], 'BLUE': [0, 0, 128], 'YELLOW': [255, 255, 0]}images = []for file in os.listdir(IMAGE_DIRECTORY): if not file.startswith('.'): images.append(get_image(os.path.join(IMAGE_DIRECTORY, file)))def match_image_by_color(image, color, threshold = 60, number_of_colors = 10): image_colors = get_colors(image, number_of_colors, False) selected_color = rgb2lab(np.uint8(np.asarray([[color]]))) select_image = False for i in range(number_of_colors): curr_color = rgb2lab(np.uint8(np.asarray([[image_colors[i]]]))) diff = deltaE_cie76(selected_color, curr_color) if (diff < threshold): select_image = True return select_imagedef show_selected_images(images, color, threshold, colors_to_match): index = 1 for i in range(len(images)): selected = match_image_by_color(images[i], color, threshold, colors_to_match) if (selected): plt.subplot(1, 5, index) plt.imshow(images[i]) index += 1#Search for GREENplt.figure(figsize = (20, 10))show_selected_images(images, COLORS['GREEN'], 60, 5) ```
回答:
作为一个快速且不太完美的解决方案,你可以在列表中存储(filename, image)
的元组,而不仅仅是image
:
for file in os.listdir(IMAGE_DIRECTORY): if not file.startswith('.'): images.append((file, get_image(os.path.join(IMAGE_DIRECTORY, file)))) ^^^^^^^ ^... selected = match_image_by_color(images[i][1], ^^^ color, threshold, colors_to_match) if (selected): print(f'Selected image {images[i][0]}') ^^^ plt.subplot(1, 5, index) plt.imshow(images[i][1]) ^^^ index += 1
对于更清洁的解决方案,你可以创建一个包含文件名和图片的包装类。你可能会发现match_image_by_color
也可以作为该类的方法添加进去。