如何将RGB图像转换为含像素坐标与RGB值的Pandas DataFrame
给RGB像素DataFrame添加x/y坐标的解决方案
嘿,刚好能帮你解决这个问题!你已经搞定了RGB值的提取,差的就是生成对应每个像素的x(列坐标)和y(行坐标)啦。
问题的核心是:PIL的getdata()会把图像像素按从上到下、从左到右的顺序展平成一维数组,但不会附带位置信息。我们需要手动生成和这个顺序完全匹配的x/y坐标数组,再合并到DataFrame里。
完整实现代码
from PIL import Image import numpy as np import pandas as pd # 1. 读取图像并提取RGB像素 colourImg = Image.open("test.png") colourPixels = colourImg.convert("RGB") colourArray = np.array(colourPixels.getdata()) # 2. 获取图像的宽高,用于生成坐标 width, height = colourImg.size # 3. 生成匹配像素顺序的x/y坐标 # 创建坐标网格:x是从0到width-1的列索引,y是从0到height-1的行索引 x_coords, y_coords = np.meshgrid(np.arange(width), np.arange(height)) # 把二维网格展平成一维数组,和colourArray的长度完全一致 x_flat = x_coords.flatten() y_flat = y_coords.flatten() # 4. 合并坐标和RGB值到DataFrame df = pd.DataFrame({ "x": x_flat, "y": y_flat, "red": colourArray[:, 0], "green": colourArray[:, 1], "blue": colourArray[:, 2] }) # 可选:查看前几行验证结果 print(df.head())
关键细节说明
- x坐标是从左到右的列索引(范围0到width-1),y坐标是从上到下的行索引(范围0到height-1),完全匹配你给出的示例输出顺序。
np.meshgrid生成的坐标网格,展平后的顺序和getdata()的像素顺序完全一致,不用担心错位问题。- 如果需要调整坐标的起始值(比如从1开始),只需要把
np.arange(width)改成np.arange(1, width+1)即可。
内容的提问来源于stack exchange,提问作者Terence Eden
相关产品推荐
相关产品推荐

