Как установить цветовую карту для PySimple GUI Image () - PullRequest
0 голосов
/ 14 июля 2020

Есть ли способ установить цветовую карту для sg.Image () или sg.DrawImage ()? В моем случае у меня есть тепловое изображение в оттенках серого (однополосное), которое я хотел бы показать с помощью цветовой карты тепла. Краткий пример текущего кода:

import PySimpleGUI as sg

layout = [[sg.Image(thermal_image_path, size=(600, 600))]]
window = sg.Window('Show image', size=(600, 600), 
                   resizable=True).Layout(layout).finalize()

1 Ответ

0 голосов
/ 14 июля 2020

Вы можете сопоставить оттенки серого с диапазоном различных оттенков и установить постоянную насыщенность и яркость - см. статью в Википедии о HSL

#!/usr/bin/env python3

import numpy as np
import cv2

def heatmap(im):
    # Map range 0..255 of greys to Hues in range 60..180
    # Keep Lightness=127, Saturation=255
    # https://en.wikipedia.org/wiki/HSL_and_HSV#Hue_and_chroma
    H = (im.astype(np.float32) * 120./255.).astype(np.uint8) + 60
    L = np.full((h,w), 127, np.uint8)
    S = np.full((h,w), 255, np.uint8)
    HLS = cv2.merge((H,L,S))
    return cv2.cvtColor(HLS,cv2.COLOR_HLS2RGB)
    

# Create greyscale gradient
w, h = 256, 100
grey = np.repeat(np.arange(w,dtype=np.uint8).reshape(1,-1), h, axis=0) 
cv2.imwrite('grey.png',grey)     # debug only

# Apply heatmap to greyscale image
hm = heatmap(grey)

# Just for display
from PIL import Image
Image.fromarray(hm).save('result.png')

Это делает следующее изображение в оттенках серого :

enter image description here

And then gets transformed to this:

enter image description here


Or you could shell out to ImageMagick with subprocess.run(), or use палочка (его Python привязка) для этого:

Сделайте рампу серой шкалы 100x100 - это просто настройка для создания изображение для работы:

magick -size 100x100 gradient: grey.png

enter image description here

Make a 5-colour тепловая карта путем изменения оттенков по кругу HSL - это нужно сделать только один раз, и вы можете сохранить и повторно использовать изображение heat.png:

magick xc:"hsl(240,255,128)" xc:"hsl(180,255,128)" xc:"hsl(120,255,128))" xc:"hsl(60,255,128)" xc:"hsl(0,255,128)" +append heat.png

enter image description here

Map the shades of the greyscale image to our CLUT (colour lookup table) - this is the actual answer:

magick grey.png heat.png -clut result.png

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...