如何将图像主色提取结果存入单列Pandas DataFrame而非仅打印
修改提取图像主色代码,新增Pandas DataFrame存储功能
关键修改说明
- 新增导入
pandas库,用于构造和操作DataFrame - 在提取到主色名称列表后,按照需求生成名为
Colors的单列DataFrame - 可选添加DataFrame打印查看、CSV文件保存的功能
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from PIL import Image import webcolors import pandas as pd # 新增导入pandas def closest_color(requested_color): min_colors = {} for key, name in webcolors.CSS3_HEX_TO_NAMES.items(): r_c, g_c, b_c = webcolors.hex_to_rgb(key) rd = (r_c - requested_color[0]) ** 2 gd = (g_c - requested_color[1]) ** 2 bd = (b_c - requested_color[2]) ** 2 min_colors[(rd + gd + bd)] = name return min_colors[min(min_colors.keys())] def get_color_name(rgb_color): try: return webcolors.rgb_to_name(rgb_color) except ValueError: return closest_color(rgb_color) def extract_dominant_colors(image_path, num_colors=5): # 加载图像并转换为RGB格式 img = Image.open(image_path) img = img.convert('RGB') img_array = np.array(img) # 重塑数组以适配KMeans聚类 pixels = img_array.reshape((-1, 3)) # 用KMeans提取主色 kmeans = KMeans(n_clusters=num_colors) kmeans.fit(pixels) # 获取主色RGB值 dominant_colors = kmeans.cluster_centers_.astype(int) # 转换为颜色名称 color_names = [get_color_name(tuple(color)) for color in dominant_colors] # 打印主色名称 print(' '.join(color_names)) # 新增:生成单列Pandas DataFrame color_data = {'Colors': color_names} color_frame = pd.DataFrame(color_data) # 可选:打印DataFrame验证结果 print("\n生成的DataFrame:") print(color_frame) # 可选:将DataFrame保存为CSV文件 # color_frame.to_csv('dominant_colors.csv', index=False) # 显示调色板窗口 plt.figure(figsize=(8, 2)) plt.imshow([dominant_colors]) plt.axis('off') plt.show() return color_names, color_frame # 新增返回DataFrame,方便后续操作 # 调用函数,获取主色名称和DataFrame _, df = extract_dominant_colors('test_image.jpg')
功能验证
运行代码后会输出:
- 控制台打印的主色名称(示例:
gray maroon silver gray black) - 生成的DataFrame结构及内容
- 弹出的调色板预览窗口
- 若开启CSV保存功能,当前目录会生成
dominant_colors.csv文件
内容的提问来源于stack exchange,提问作者user20649218
相关产品推荐
相关产品推荐

