Как я могу применить преобразование цветовой карты OpenCV в Keras ImageDataGenerator? - PullRequest
4 голосов
/ 25 мая 2020

Я хочу применить фильтр цветовой карты OpenCV ко всем моим изображениям Train, но я использую метод flow_from_directory следующим образом:

train_datagen = ImageDataGenerator()

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

Как я могу добавить цветовую карту в этом случае?

1 Ответ

3 голосов
/ 25 мая 2020

Вы можете передать функцию предварительной обработки на ImageDataGenerator.

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

train_generator = ImageDataGenerator(preprocessing_function=cmap_transf)

Полный рабочий пример:

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')

Оригинал:

enter image description here

Предварительно обработанный:

enter image description here

...