0

我制作了以下 python 层并将其添加到 LeNet 架构中。但是在构建模型时会出错。我将使用 Numpy 应用我的 Python 层,但是当我使用 OpenCV 时会出现错误。下面我从日志文件中添加我的代码和相应的错误。

导入简历2
进口咖啡
随机导入

def doEqualizeHist(img): img = img.astype(np.uint8) img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) 返回 cv2.equalizeHist(img)

类 EqualizeLayer(caffe.Layer): def 设置(自我,底部,顶部): assert len(bottom) == 1, '需要一个 layer.bottom' assert bottom[0].data.ndim >= 3, '需要图像数据' 断言 len(top) == 1, '需要一个 layer.top'

def reshape(self, bottom, top): # Copy shape from bottom top[0].reshape(*bottom[0].data.shape) def forward(self, bottom, top): # Copy all of the data top[0].data[...] = bottom[0].data[...] for ii in xrange(0, top[0].data.shape[0]): imin = top[0].data[ii, :, :, :].transpose(1, 2, 0) top[0].data[ii, :, :, :] = doEqualizeHist(imin).transpose(2, 0, 1) def backward(self, top, propagate_down, bottom): pass

错误消息:0812 06:41:53.452097 14355 net.cpp:723] 忽略源层训练数据 OpenCV 错误:在 cvtColor、文件 /build/opencv-SviWsf/ 中断言失败 (scn == 3 || scn == 4) opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp,第 3737 行 Traceback(最近一次调用最后):文件“/var/lib/digits/jobs/20170812-064148-f44d/digits_python_layers.py”,第 27 行,向前 top[0].data[ii, :, :, :] = doEqualizeHist(imin).transpose(2, 0, 1) 文件“/var/lib/digits/jobs/20170812-064148-f44d /digits_python_layers.py”,第 8 行,在 doEqualizeHist img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) cv2.error: /build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/color。 cpp:3737: 错误: (-215) scn == 3 || 函数 cvtColor 中的 scn == 4

4

1 回答 1

1

为了将来参考,OpenCV 中的“断言失败”错误消息意味着您将无效数据传递给函数。在这种情况下,失败的断言是scn == 3 || scn == 4。要确切了解这意味着什么,您可以查看断言失败的源文件:modules/impgproc/src/color.cpp并检查它发生的函数:cvtColor在第 3737 行。看看变量scn代表什么。

在您的情况下,问题在于您正在转换img为单通道格式,然后尝试将其从 RGB 转换为灰度。该转换首先断言输入是 3 或 4 通道格式。事实并非如此断言失败。

于 2017-08-12T16:50:55.303 回答