rgb-array aus imshow objekt extrahieren
Verfasst: Mittwoch 30. März 2022, 11:27
Hi!
ich möchte ein 2D-Array aus Höhenwerten in schwarz-weiß plotten. Werte unter einem bestimmten Schwellwert sollen eine eigene Farbe bekommen. Folgender Code erzeugt das gewünschte Ergebnis:
nun habe ich eine Array maske der selben Dimensionen in x und y, d.h. ein 2D-Array aus Bools, wobei relevante Bereiche mit True, irrlevante mit False besetzt sind.
Diese Maske möchte ich nun auf das imshow-Objekt anwenden. Aus einer vorherigen Programmierung habe ich folgende, funktionierende Funktion, die ein 3D-Array als Bild (3D: ein als mpimg.imread-eingelesenes Bild der Dimension 1024x1024 Pixel hat die Dimension 1024x1024x3, wobei die 3. Dimension den R - G - oder B Wert angibt). An den durch die Maske gekennzeichneten relevanten Bereichen färbt sie den True-Bereich ein.
Die Funktion apply_mask möchte ich nun mit dem imshow-Objekt füttern, und nicht mit einem als mpimg.imread-eingelesenen Bild. Dazu benötige ich aber ja die RGB-Informationen für jeden Arrayeintrag. Meine Frage ist jetz: kann ich aus dem imshow-Objekt das RGB-Array extrahieren?
ich möchte ein 2D-Array aus Höhenwerten in schwarz-weiß plotten. Werte unter einem bestimmten Schwellwert sollen eine eigene Farbe bekommen. Folgender Code erzeugt das gewünschte Ergebnis:
Code: Alles auswählen
custom_cmap = []
for i in range(0, 255):
custom_cmap.append([i/255, i/255, i/255])
custom_cmap = ListedColormap(custom_cmap)
custom_cmap.set_under(color=[112/255,128/255,144/255])
fig, ax = plt.subplots(figsize=(30,15))
plt.imshow(xyz_dataset_z_coordinates_np, cmap = custom_cmap,
vmin = np.amin(xyz_dataset_z_coordinates_np + 1))
ax.set_axis_off()
nun habe ich eine Array maske der selben Dimensionen in x und y, d.h. ein 2D-Array aus Bools, wobei relevante Bereiche mit True, irrlevante mit False besetzt sind.
Diese Maske möchte ich nun auf das imshow-Objekt anwenden. Aus einer vorherigen Programmierung habe ich folgende, funktionierende Funktion, die ein 3D-Array als Bild (3D: ein als mpimg.imread-eingelesenes Bild der Dimension 1024x1024 Pixel hat die Dimension 1024x1024x3, wobei die 3. Dimension den R - G - oder B Wert angibt). An den durch die Maske gekennzeichneten relevanten Bereichen färbt sie den True-Bereich ein.
Code: Alles auswählen
# helpferfunction to apply a mask with specific color and opacity to the image
def apply_mask(image, mask, color, alpha):
# override the r-g-b values of the image at the coordinates given from the mask
for c in range(3):
image[:, :, c] = np.where(
mask == 1,
image[:, :, c] *
(1 - alpha) + alpha * color[c] * 255,
image[:, :, c])
return image
Die Funktion apply_mask möchte ich nun mit dem imshow-Objekt füttern, und nicht mit einem als mpimg.imread-eingelesenen Bild. Dazu benötige ich aber ja die RGB-Informationen für jeden Arrayeintrag. Meine Frage ist jetz: kann ich aus dem imshow-Objekt das RGB-Array extrahieren?