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