[英]Changing pixel color using PIL on Python
我對編程非常陌生,並且正在學習有關使用PIL進行圖像處理的更多信息。
我有一項特定的任務,要求我將每個特定像素的顏色更改為另一種顏色。 由於需要更改的像素不止幾個,因此我創建了一個for循環來訪問每個像素。 腳本至少“有效”,但是結果只是每個像素中具有(0,0,0)顏色的黑屏。
from PIL import Image
img = Image.open('/home/usr/convertimage.png')
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
if pixels[i,j] == (225, 225, 225):
pixels[i,j] = (1)
elif pixels[i,j] == (76, 76, 76):
pixels [i,j] = (2)
else: pixels[i,j] = (0)
img.save('example.png')
我的圖像是灰度圖像。 有特定的顏色,並且邊框附近有漸變顏色。 我試圖用另一種顏色替換每種特定的顏色,然后用另一種顏色替換漸變顏色。
但是,對於我一生來說,我根本不明白為什么我的輸出完全只顯示一種(0,0,0)顏色。
我試圖在網上和朋友那里尋找答案,但無法提出解決方案。
如果外面有人知道我在做什么錯,我們將非常感謝您提供任何反饋意見。 提前致謝。
問題是,正如您所說,您的圖像是灰度的 ,因此在此行上:
if pixels[i,j] == (225, 225, 225):
沒有像素會等於RGB三元組(255,255,255)
因為白色像素將只是灰度值255
而不是RGB三元組。
如果將循環更改為:
if pixels[i,j] == 29:
pixels[i,j] = 1
elif pixels[i,j] == 179:
pixels [i,j] = 2
else:
pixels[i,j] = 0
這是對比結果:
您可能要考慮使用“ Look Up Table”或LUT進行轉換,因為大量的if
語句可能會變得笨拙。 基本上,圖像中的每個像素都會替換為一個新像素,該像素可以通過在表中查找其當前索引來找到。 我也用numpy
來做,很有趣:
#!/usr/local/bin/python3
import numpy as np
from PIL import Image
# Open the input image
PILimage=Image.open("classified.png")
# Use numpy to convert the PIL image into a numpy array
npImage=np.array(PILimage)
# Make a LUT (Look-Up Table) to translate image values. Default output value is zero.
LUT=np.zeros(256,dtype=np.uint8)
LUT[29]=1 # all pixels with value 29, will become 1
LUT[179]=2 # all pixels with value 179, will become 2
# Transform pixels according to LUT - this line does all the work
pixels=LUT[npImage];
# Save resulting image
result=Image.fromarray(pixels)
result.save('result.png')
結果-拉伸對比度后:
上面我可能有點冗長,所以如果您喜歡更簡潔的代碼:
import numpy as np
from PIL import Image
# Open the input image as numpy array
npImage=np.array(Image.open("classified.png"))
# Make a LUT (Look-Up Table) to translate image values
LUT=np.zeros(256,dtype=np.uint8)
LUT[29]=1 # all pixels with value 29, will become 1
LUT[179]=2 # all pixels with value 179, will become 2
# Apply LUT and save resulting image
Image.fromarray(LUT[npImage]).save('result.png')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.