图像库(例如PIL,OpenCV等)如何将浮点值转换为整数像素值?
例如
import numpy as np
from PIL import Image
# Creates a random image and saves in a file
def get_random_img(m=0,s=1,fname='temp.png'):
im = m + s * np.random.randn(60,60,3) # For eg. min: -3.8947058634971179,max: 3.6822041760496904
print(im[0,0]) # for eg. array([ 0.36234732,0.96987366,0.08343])
imp = Image.fromarray(im,'RGB') # (*)
print(np.array(imp)[0,0]) # [140,74,217]
imp.save(fname)
return im,imp
对于上述方法,注释中提供了一个示例(随机产生)。我的问题是:如何将(*)
(范围从-无穷大到正无穷大)转换为ndarray
到0到255之间的像素值?
我试图研究Pil.Image.fromarray
方法,并最终在d.decode(data)
方法内的行#798 Pil.Image.Image().frombytes
处结束。我可以找到decode
方法的实现,因此无法知道转换后进行了什么计算。
我最初的想法是,该方法可能使用数组中的 minimum (至0)和 maximum (至255)值,然后相应地映射所有其他值0和255。但是经过调查,我发现事实并非如此。而且,当数组的值在0到1之间或任何其他值范围内时,该如何处理?