0
像素数据欲执行以下操作:像素由在Python
- 负载PNG图像与Python代码
- 由像素RGB数据获取像素在三个阵列,每一个用于R,G一个和B.我的意思是R [i,j]应该给我R值在图像的第i,j个像素处。
- 一旦我有阵列,我总是可以编辑数据。
- 剧情使用三个阵列R,G和B,并保存为另一个png图片
如何去做在python编辑的数据?
像素数据欲执行以下操作:像素由在Python
如何去做在python编辑的数据?
使用PIL加载图像:
from PIL import Image
img = Image.open('yourimage.png')
我要去表明,与图像数据直接弄乱的方法,无需通过坐标访问单个像素。
您可以在一个大的字节串获得的图像数据:
data = img.tostring()
您应该检查img.mode
的像素格式。 假设它是“RGBA”,下面的代码会给你不同的渠道:
R = data[::4]
G = data[1::4]
B = data[2::4]
A = data[3::4]
如果您要访问的协调,你可以做类似像素:
width = img.size[0]
pixel = (R[x+y*width],G[x+y*width],B[x+y*width],A[x+y*width])
我们把它补好,有可能是一个更好的办法,但你可以使用zip
:
new_data = zip(R,G,B,A)
而且reuce:
new_data = ''.join(reduce(lambda x,y: x+y, zip(R,G,B,A)))
然后保存图片:
new_img = Image.fromstring('RGBA', img.size, new_data)
new_img.save('output.png')
而在这归零红色通道的例子这里的一切融合在一起:这里
from PIL import Image
img = Image.open('yourimage.png')
data = img.tostring()
R = data[::4]
G = data[1::4]
B = data[2::4]
A = data[3::4]
R = '\0' * len(R)
new_data = ''.join(reduce(lambda x,y: x+y, zip(R,G,B,A)))
new_img = Image.fromstring('RGBA', img.size, new_data)
new_img.save('output.png')
'tostring()'被弃用,而使用'data = str(img.tobytes)'' – Akshay 2016-06-25 08:03:28
见答案:http://stackoverflow.com/questions/138250/read-the-rgb-value-of-given-pixel-in-python-programatically – ojs 2013-05-04 13:17:13
@lovespeed。既然你已经知道你想要做什么的高水平,你就在中途。另一半则试图完成各个步骤。为什么不去学习如何在python中加载图像,并在*之后发布一个问题*你被困住了。 – jpaugh 2017-08-21 15:35:41