How can I Apply OpenCV colormap transformation in Keras ImageDataGenerator?

Viewed 661

I want to apply a OpenCV colormap filter in all my Train images, but i'm using the flow_from_directory method as follows:

train_datagen = ImageDataGenerator()

train_generator = train_datagen.flow_from_directory(TRAIN_DIR,
    target_size=(224, 224),
    batch_size=50,
    class_mode='binary')

How can I add the colormap in this case?

1 Answers

You can pass a preprocessing function to ImageDataGenerator.

def cmap_transf(image):
    return cv2.applyColorMap(image.astype(np.uint8), cv2.COLORMAP_JET)

train_generator = ImageDataGenerator(preprocessing_function=cmap_transf)

Full working example:

import cv2
import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import os
import matplotlib.pyplot as plt

os.makedirs('test', exist_ok=True)
cv2.imwrite('test/img.jpg', np.random.randint(0, 256, (200, 200, 3)))

def cmap_transf(image):
    return cv2.applyColorMap(image.astype(np.uint8), cv2.COLORMAP_JET)

train_generator = ImageDataGenerator(preprocessing_function=cmap_transf)

plt.imshow(next(iter(train_generator.
                     flow_from_directory('.', 
                                         classes=['test'])))[0][0, ...])

os.unlink('test/img.jpg')
os.rmdir('test')

Original:

enter image description here

Preprocessed:

enter image description here

Related