Python 中的色譜
本教程將討論在 Python 中建立具有色譜的影象的方法。
使用 Python 中的 PIL
庫的色譜
來自太陽的白光在通過稜鏡後向其成分中的色散稱為色譜。它包含肉眼可見的整個光波長範圍。換句話說,色譜包含原色(紅色、綠色和藍色)和所有原色的中間組合。Python Imaging Library PIL
用於在 Python 中處理影象。我們可以使用 PIL
庫來建立包含我們所需色譜的影象。出於本教程的目的,我們將在 Python 中使用 PIL
在具有所需尺寸的影象中重新建立以下色譜。
以下程式碼示例向我們展示瞭如何使用 PIL
庫在所需尺寸的影象中重新建立相同的色譜。
from PIL import Image
def color_spectrum(height, width):
spectrum_ratio = 255 * 6 / width
red = 255
green = 0
blue = 0
colors = []
step = round(spectrum_ratio)
for i in range(0, height):
for j in range(0, 255 * 6 + 1, step):
if j > 0 and j <= 255:
blue += step
elif j > 255 and j <= 255 * 2:
red -= step
elif j > 255 * 2 and j <= 255 * 3:
green += step
elif j > 255 * 3 and j <= 255 * 4:
blue -= step
elif j > 255 * 4 and j <= 255 * 5:
red += step
elif j > 255 * 5 and j <= 255 * 6:
green -= step
colors.append((red, green, blue))
width2 = int(j / step + 1)
image = Image.new("RGB", (width2, height))
image.putdata(colors)
image.save("Picture2.png", "PNG")
if __name__ == "__main__":
create_spectrum(100, 300)
輸出:
我們在上面的程式碼中使用 PIL
複製了與示例影象中顯示的相同的色譜。
我們用 image = Image.new("RGB", (width2, height))
建立了一個 RGB 影象,並用 image.putdata(colors)
填充了 8 位顏色值。這裡,colors
是一個元組列表,其中每個元組包含三個值(紅色、綠色和藍色)。正如我們所知,8 位顏色的值範圍從 0 到 255。我們初始化了三個變數 red
、green
和 blue
,每個變數代表一種原色的值。spectrum_ratio
用於簡化計算。它代表我們看到相同顏色的畫素數。我們的巢狀迴圈增加了一個 step
,因為不需要遍歷許多具有相同顏色的不同畫素。step
變數是通過用 step = round(spectrum_ratio)
舍入 spectrum_ratio
來計算的。
正如我們所看到的,色譜從紅色開始,逐漸地紅色開始褪色,藍色在靠近影象中間的地方增加其強度。當色譜中只剩下藍色時,綠色開始變強,藍色從左到右慢慢開始褪色。當所有的藍色消失,只剩下綠色時,紅色的強度又開始增加,綠色開始褪色。當綠色完全消失時,影象結束,我們只剩下紅色。
上一段中描述的邏輯已在我們的巢狀迴圈中進行編碼,每次迭代後,我們使用 colors.append((red, green, blue))
將新的 RGB 值附加到我們的列表 colors
中。影象的原始寬度已更改,因為我們已將 spectrum_ratio
舍入為 step
。我們建立了 width2
來應對這種變化。將顏色值寫入我們的新影象後,我們使用 image.save("Picture2.png", "PNG")
儲存影象。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn