ImageDataGenerator tensorflow.keras.preprocessing.image 中的 preprocessing_function 未应用

问题描述

我试图使用 ImageDataGenerator 并应用 prepocssing 函数来应用一些随机色调。当我通过 ImageDataGenerator 对单个图片运行转换时,我没有看到它的应用。

def hue_change(image):
new_img = tf.image.random_hue(np.array(image),0.2)
return new_img

IMG_gen = ImageDataGenerator(rotation_range=30,height_shift_range=0.05,width_shift_range=0.05,fill_mode='nearest',zoom_range=0.03,rescale=1./255,preprocessing_function=hue_change)

当我直接将这个函数直接应用到图片中时,它起作用了。

plt.imshow(hue_change(imread('Train//Apple Granny Smith//179_100.jpg')))

但是当我通过 random_transform 生成它时

plt.imshow(IMG_gen.random_transform(imread(('Train//Apple Granny Smith//179_100.jpg'))))

我没有看到任何变化。

你能告诉我为什么它会这样工作吗?

解决方法

我使用 ImageDataGenerator.flow_from_directory 尝试了 Hue_change 预处理函数并显示了正确的结果。色调随机变化。我也在图像上尝试了你的代码

dgen=ImageDataGenerator(preprocessing_function=hue_change)
nimage=dgen.random_transform(image)
plt.imshow(nimage)

正如您所注意到的,这不会修改色调。 random_transform 本身应该对图像应用随机变换。我不知道为什么没有。或许答案 here 可能会有所帮助。