我有一個 300*500 的影像。它是灰度的,范圍為 0-255。我想逐個值迭代值并將熱圖(比如 viridis 但沒關系)應用于每個值。
我最終的熱圖影像是紅色、藍色、綠色和 Alpha。我想特定的熱圖函式將采用灰度值并為每個紅色、藍色、綠色及其適當的權重輸出三個值。
f(0-255) = weightr(紅色),weightb(藍色),weightg(綠色)。
我的結束影像將具有尺寸 (300,500,4) 四個通道是 r、b、g 和一個 alpha 通道。
實作這一目標的功能是什么?幾乎可以肯定,它將高度依賴于特定的熱圖。Viridis 是我所追求的,但我也想了解這個概念。
下面的代碼讀入一個隨機影像(它來自 unsplash 的事實并不重要)并將其轉換為一個 (300,500)、0-255 的影像,稱為imgarray。我知道 matplotlib 默認為 viridis,但我包含了額外的步驟來展示我想用我自己的函式實作什么。
import matplotlib.pyplot as plt
import requests
from PIL import Image
from io import BytesIO
img_src = 'https://unsplash.it/500/300'
response = requests.get(img_src)
imgarray = Image.open(BytesIO(response.content))
imgarray = np.asarray(imgarray.convert('L'))
from matplotlib import cm
print(cm.viridis(imgarray))
plt.imshow(cm.viridis(imgarray))
uj5u.com熱心網友回復:
Matplotlib 將 viridis 顏色圖定義為 256 種 RGB 顏色(每個 8 位灰度值一個),其中每個顏色通道是來自 [0, 1] 的浮點值。定義可以在
真正的魔法發生在該np.take(a, indices)方法中,該方法從給定的陣列a(viridis LUT)中獲取值indices(來自影像的 0..255 的灰度值)。為了得到與函式相同的結果cm.viridis,我們只需要添加一個 alpha 通道(充滿1.= 完全不透明度)。
作為參考,在源代碼中也發生了相同的轉換。matplotlib
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/487375.html
標籤:Python 图片 matplotlib 热图 RGB
