如何转换Keras中的图像色彩空间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何转换Keras中的图像色彩空间?相关的知识,希望对你有一定的参考价值。

我正在将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()等函数。

谢谢!

答案

如果导入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)))
另一答案

我希望在使用Keras lambda图层的预处理层中使用opencv,以确保无论是训练,测试还是预测,对我的图像进行的所有预处理都是相同的。但是我发现你必须在张量上使用张量运算。因此,您只能在lambda中使用简单的算术运算,并且可以在keras.backend中找到任何张量运算。

以上是关于如何转换Keras中的图像色彩空间?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IPP 将 8 位灰度图像转换为 NV12(有限范围)色彩空间

学习OpenCV4教你替换绿幕背景

opencv笔记2-图像色彩空间转换

OpenCV实战——OpenCV色彩空间转换

OpenCV实战——OpenCV色彩空间转换

使用 cvtColor 进行 OpenCV 图像色彩空间转换