Python 使用OpenCV时如何在NN中使用keras Lambda

Python 使用OpenCV时如何在NN中使用keras Lambda,python,opencv,keras,keras-layer,Python,Opencv,Keras,Keras Layer,我有一个函数 def preprocess(image): image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV) image = cv2.GaussianBlur(image, (3, 3), 0) image = cv2.resize(image, (200, 66)) return image 我想在像这样的NN的Lambda层中使用这个函数 model=Sequential() model.add(Lambda(prep

我有一个函数

def preprocess(image):
  image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
  image = cv2.GaussianBlur(image,  (3, 3), 0)
  image = cv2.resize(image, (200, 66))
  return image
我想在像这样的NN的Lambda层中使用这个函数

  model=Sequential()

  model.add(Lambda(preprocess,input_shape=(160,320,3)))
  #model.add(Lambda(lambda x: (x / 255.0) - 0.5, input_shape=(160,320,3)))
  model.add(Lambda(lambda x: (x / 255.0) - 0.5))
  model.add(Cropping2D(cropping=((60,25), (0,0))))
然而我得到了错误

model = nvidia_model()
print(model.summary())

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-9f6554917809> in <module>()
----> 1 model = nvidia_model()
      2 print(model.summary())

6 frames
<ipython-input-9-5e5ec9bc70c2> in preprocess(image)
      1 def preprocess(image):
      2   
----> 3   image = cv2.cvtColor(image, cv2.COLOR_RGB2YUV)
      4   image = cv2.GaussianBlur(image,  (3, 3), 0)
      5   image = cv2.resize(image, (200, 66))

TypeError: Expected Ptr<cv::UMat> for argument '%s'
model=nvidia_model()
打印(model.summary())
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->1型号=nvidia_型号()
2打印(model.summary())
6帧
在预处理中(图像)
1 def预处理(图像):
2.
---->3图像=cv2.CVT颜色(图像,cv2.COLOR\u RGB2YUV)
4图像=cv2.高斯模糊(图像,(3,3,0)
5图像=cv2。调整大小(图像,(200,66))
TypeError:参数“%s”应为Ptr
如何将此函数用作NN的一层??(请注意,仅使用lambda x:(x/255.0)就可以很好地工作


注意:我不想在外部做这件事。(因为我已经做了,它工作得很好,但现在我正在尝试在内部做)

我认为你不能,因为opencv操作没有梯度。而且,处理通常应该在模型训练之前进行。好吧。但是标准化和裁剪确实有效……但是你没有使用opencv,对吗?你使用的是Keras层,它实现了梯度。你实现了标准化关于使用Keras/Tensorflow张量的操作,以及Cropping2D层[在Tensorflow中也使用张量实现]。这些支持自动微分,这是模型训练所必需的。Numpy/opencv不支持此功能。好的。我发现了此功能,但无法理解其工作原理