Keras img_to_array中有什么? (与C#中的位图数组相比)

时间:2019-02-13 14:31:38

标签: c# keras rgb

我试图了解keras.preprocessing.image.img_to_array中的内容吗?

https://github.com/tensorflow/tensorflow/blob/r1.8/tensorflow/python/keras/_impl/keras/preprocessing/image.py

当我查看数组的内容时,它们如下(所有元素都在float中):

image1 = img_to_array(image.load_img(ImagePath, target_size=(128,128))) / 255

[0.16470588743686676, 0.3019607961177826, 0.07450980693101883], [0.1we23423423486676, 0.3023423423423423, 0.01353463453458483] ......

似乎它们是图像的RGB通道,但为什么是分数呢?但是,如果我用C#查看位图,它们是整数,例如(Alpha,R,G,B)

[100,123,024,132],[021,055,243,015].... 

有人可以解释一下C#中由img_to_array和位图数组格式生成的图像数组有什么区别吗?

谢谢, PCG

2 个答案:

答案 0 :(得分:2)

img_to_arrayKeras implementation的文档字符串中有很好的解释:

def img_to_array(img, data_format='channels_last', dtype='float32'):
    """Converts a PIL Image instance to a Numpy array.
    # Arguments
        img: PIL Image instance.
        data_format: Image data format,
            either "channels_first" or "channels_last".
        dtype: Dtype to use for the returned array.
    # Returns
        A 3D Numpy array.
    # Raises
        ValueError: if invalid `img` or `data_format` is passed.
    """

因此它将使用PIL Image实例并将其转换为numpy数组,并使用dtype float32。如果从PNG图像开始,则图像内部的值将介于0到255之间。这通常由8位无符号整数表示; img_to_array但是会​​强制浮动。在您的代码示例中,数组除以255,因此这就是为什么最终会产生0到1之间的浮点数。

答案 1 :(得分:0)

每个位的值从0到255不等,并且在您的代码“ image1 = img_to_array(image.load_img(ImagePath,target_size =(128,128)))/ 255”中,所有值均除以255,这使其浮点数有所不同从0到1。此代码实际上是用于将值的范围从0-255减小到0-1。希望对您有所帮助,如果您使用什么正常值,请尝试不使用“ / 255”,例如“ image1 = img_to_array(image.load_img(ImagePath,target_size =(128,128)))”。