如何从RGB像素值创建图像及Python像素处理相关问题
解答
1. 确定像素坐标并重组图像
PIL的getdata()返回的像素是行优先排列的(从左到右、从上到下遍历图像),可以通过图像的宽高计算每个像素的坐标:
from PIL import Image filename = "INSERT_PATH_OF_IMAGE" image = Image.open(filename) width, height = image.size pixels = list(image.getdata()) # 计算第i个像素的坐标 for i in range(len(pixels)): x = i % width y = i // width # 可按需处理坐标与像素值,如打印 # print(f"坐标({x}, {y}):{pixels[i]}") # 重组图像直接用Image.new和putdata即可 new_image = Image.new("RGB", (width, height)) new_image.putdata(pixels) new_image.save("reconstructed_image.png")
如果后续要转用OpenCV,可将PIL图像转为numpy数组(OpenCV图像基于numpy数组,且为BGR顺序):
import numpy as np # PIL RGB格式转OpenCV BGR格式 cv_image = np.array(image)[:, :, ::-1]
2. 输出(R,G,B)元组列表
你代码里的t变量已经是这种格式了,image.getdata()默认返回每个像素的(R,G,B)元组列表,直接打印即可:
from PIL import Image filename = "INSERT_PATH_OF_IMAGE" image = Image.open(filename) pixel_tuples = list(image.getdata()) print(pixel_tuples)
如果要自行用r、g、b列表组合,用zip()函数即可:
r = list(image.getdata(0)) g = list(image.getdata(1)) b = list(image.getdata(2)) pixel_tuples = list(zip(r, g, b)) print(pixel_tuples)
3. 将结果保存到文本文件
用文件写入操作替代打印,避免终端溢出。若要生成可读性强的格式,可借助json模块:
from PIL import Image import json filename = "INSERT_PATH_OF_IMAGE" image = Image.open(filename) pixel_tuples = list(image.getdata()) # 写入文本文件 with open("pixel_data.txt", "w", encoding="utf-8") as f: # 用json.dumps格式化输出,提升可读性 f.write(json.dumps(pixel_tuples, indent=2))
打开代码所在目录的Windows文件资源管理器,即可找到生成的pixel_data.txt。
学习资料建议
- 先掌握Pillow(PIL)官方文档中的基础操作,比如像素读取、图像创建、格式转换等
- 入门OpenCV时,重点理解numpy数组与图像的对应关系,以及核心函数(图像读取、像素访问、色彩空间转换等)
- 可参考《Python图像处理:基于Pillow与OpenCV》这类书籍,兼顾基础理论与实践案例
- 多关注StackOverflow的
python-imaging-library和opencv-python标签,学习热门问题的解决方案
内容的提问来源于stack exchange,提问作者Zerhat
相关产品推荐
相关产品推荐

