我正在将RGB彩色图像输送到用Keras实现的神经网络。如何让Keras将图像转换为不同的色彩空间(例如YUV,Lab或某些灰度)?
我尝试使用Lambda()
图层,但收到错误:
model.add(Lambda(lambda x: cv2.cvtColor(x, cv2.COLOR_RGB2LAB), input_shape=(160, 320, 3)))
给了我
TypeError: src is not a numpy array, neither a scalar
我认为问题是x
是Tensor,我不知道如何将其转换为OpenCV接受的内容。
更好的是,如果我可以在GPU中完成它。例如。使用Tensorflow,我会使用tf.image.rgb_to_hsv()
和tf.image.rgb_to_grayscale()
等函数。
谢谢!
答案 0 :(得分:1)
如果导入tensorflow,可以在lambda中使用tf.image.rgb_to_hsv()函数:
def hsv_conversion(x):
import tensorflow as tf
return tf.image.rgb_to_hsv(x)
model.add(Lambda(hsv_conversion, input_shape=(160, 320, 3)))
答案 1 :(得分:0)
我一直希望在使用Keras lambda层的预处理层中使用opencv,以确保对我的图像进行的所有预处理都是相同的,无论是训练,测试还是预测。但是我发现您必须对张量使用张量运算。因此,您仅限于lambda中的简单算术运算以及在keras.backend中可以找到的任何张量运算。