将RGB格式Numpy图像转换为含行列索引的RGB值列表
将Numpy RGB图像矩阵转换为带行列索引的扁平化数组
要实现将形状为(n,m,3)的RGB图像矩阵转换为(n*m,5)的数组(前3列RGB值,后2列对应行/列索引),可以通过生成索引网格并与扁平化的RGB值拼接的方式完成,具体步骤如下:
方法实现
- 获取图像尺寸:先提取图像的行数
n和列数m - 生成行列索引:用
np.indices创建对应每个像素位置的行、列索引矩阵,再将其扁平化为(n*m,2)的数组 - 拼接RGB值与索引:将扁平化的RGB数组和索引数组横向拼接,得到最终结果
完整代码示例:
import numpy as np # 示例:创建一个2行3列的RGB图像矩阵 image = np.random.randint(0, 256, (2, 3, 3), dtype=np.uint8) # 获取图像的行、列数 n, m = image.shape[:2] # 扁平化RGB值(原代码的实现) flat_rgb = image.reshape(-1, 3) # 生成并扁平化行列索引:形状变为(n*m, 2),每行对应[行号, 列号] flat_indices = np.indices((n, m)).reshape(2, -1).T # 拼接RGB值和索引,得到形状为(n*m,5)的结果 result = np.hstack([flat_rgb, flat_indices]) # 输出验证 print("原图像形状:", image.shape) print("结果形状:", result.shape) print("\n结果示例(每行:R G B 行号 列号):") print(result)
补充说明
- 默认生成的索引是从0开始的,如果需要从1开始计数,只需给索引数组加1:
flat_indices = np.indices((n, m)).reshape(2, -1).T + 1 - 最终结果的每一行严格对应原图像中像素的位置:第
i行对应原图像中flat_indices[i][0]行、flat_indices[i][1]列的像素RGB值
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

