У меня есть 12-битная камера, которая принимает изображения в виде массива (значения целые).Когда я сохраняю массив через matplotlib как .png, а затем читаю его обратно, значения находятся в RGBA (как и ожидалось).После прочтения .png мне нужно иметь возможность преобразовать его обратно в исходное целочисленное значение.
import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm
# simulate some data
x = np.arange(0,100.1,1)
y1 = norm.pdf(x, loc=50, scale=20)
y2 = norm.pdf(x, loc=40, scale=10)
scaler = 1024/np.max(np.outer(y1,y2)) # img is 12 bits
img = np.outer(y1,y2)*scaler
img = img.astype(np.uint16) # force to be 16 bit as there is no 12 bit in np
print(np.max(img), np.min(img), img.shape)
plt.imshow(img)
plt.show()
plt.imsave(r"../img/sim.png", img, vmin=0, vmax=2**12, cmap='viridis')
img2 = plt.imread(r"../img/sim.png")
img2 # can we convert these RGBA values back to the original integers?
Я не могу понять, как преобразовать эти (эффективно) обратно в исходные целые числа.Я считаю, что это возможно, поскольку я прочитал, что .png использует сжатие без потерь.В основном мне нужно установить, что img2 равно img.
Я чувствую, что здесь определенно не хватает чего-то простого ...