python - OpenCV python 层不适用于 caffe/digits 框架

标签 python opencv caffe nvidia-digits

我制作了以下 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 中的断言失败 (scn == 3 || scn == 4),文件/build/opencv-SviWsf/opencv-2.4.9.1+dfsg/modules/imgproc/src/color.cpp,第 3737 行
回溯(最近一次通话最后):
文件“/var/lib/digits/jobs/20170812-064148-f44d/digits_python_layers.py”,第 27 行,向前
top[0].data[ii, :, :, :] = doEqualizeHist(imin).transpose(2, 0, 1)
doEqualizeHist 中的文件“/var/lib/digits/jobs/20170812-064148-f44d/digits_python_layers.py”,第 8 行
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

最佳答案

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

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

关于python - OpenCV python 层不适用于 caffe/digits 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651030/

相关文章:

python - matplotlib 导航栏错误 'FigureCanvasTkAgg' 对象在 tkinter 中没有属性 'manager'

python - 如何在 Python 中使用 appium 滚动

opencv - 训练级联分类器,同时将图像注释也作为特征包含在内

python - 使用 Python + OpenCV 的 "import cv"和 "import opencv.cv"之间的区别?

python-3.x - ubuntu 18.04 上的 caffe 导入错误 : even after installing it successfully,

python - 可以直接从 gpu 给 Caffe 或 Caffe2 输入数据吗?

python - 是否有可能使 Python 函数的行为像实例一样?

python - Selenium - 不支持 promptUserAndPass 类型的用户提示

切换到 OpenCV 的自制程序后,Xcode 找不到 dylib

c++ - 如何在 HDF5 中一个一个地存储组数组?