我在opencv

时间:2018-09-04 08:28:48

标签: python opencv keras

我正在尝试将Keras的图像分类器应用于我的项目,但是后来我陷入了困境。虽然以前使用相同的代码,但我可以使用OpenCV读取和训练图像,但是在切换到新的一批图像后,它就陷入了错误。所以我推测我的文件类型有问题:

这是从出现错误的批次中提取的:

  

traf.204.jpg:JPEG图像数据,JFIF标准1.01,长宽比,   密度1x1,段长度16,基线,精度8,480x294,帧   1

这是没有被错误捕获的批次:

  

bear.290.jpg:JPEG图像数据,JFIF标准1.01,长宽比,   密度1x1,线段长度16,基线,精度8,224x224,帧   3

但是文件类型似乎完全相同(分辨率除外)。请帮助我解决这个问题,我仍然不熟悉python上的opencv和keras。

9 个答案:

答案 0 :(得分:1)

谢谢,我想通了,我应该添加一个try / exception,以便我的代码可以绕过“丑陋”的图像:

    try:
    path=os.path.join(mypath,n)
        img=cv2.imread(path, cv2.IMREAD_GRAYSCALE)
        img=cv2.resize(img, (img_rows,img_cols))

    except Exception as e:
        print(str(e))

cv2.resize()是因为无法调整“损坏的”图像大小而应该捕获错误的地方。

答案 1 :(得分:1)

只需输入精确的图像格式。 .jpg而不是.jpeg

答案 2 :(得分:1)

就我而言,文件名中有特殊字符。如“ü”、“ä”、“/”等

我不得不做出选择:自动重命名,或者只是引发一个错误让用户知道,图片名称不正确。

答案 3 :(得分:0)

另一种可能性是图像widthheight可能为零:

print(image.shape())
# (300, 0) -> Incorrect!
# (0, 400) -> Incorrect!

# (300, 400) -> Correct!
# (400, 300) -> Correct!

当您尝试应用某些图像处理技术(例如使用OpenCV)调整图像大小时,可能会发生这种情况,并且图像的高度或宽度可能变为0

答案 4 :(得分:0)

之所以引起此问题,是因为调整图像大小后,高度或宽度变为0。 我通过在调整大小之前打印图像名称来解决此问题。因此,我可以找出导致此问题的原因是什么,并从数据集中删除该图像。 以下是我如何使用调试解决此问题的代码:

# loop over the input images
for imagePath in imagePaths:
    # load the image, pre-process it, and store it in the data list
    print(imagePath)  #here I have printed the imagename
    image = cv2.imread(imagePath)
    image = cv2.resize(image, (28, 28))   # 28, 28
    image = img_to_array(image)
    data.append(image)

答案 5 :(得分:0)

对我来说,我的相机应用是在 Windows 10 中打开的,这就是我收到该错误的原因。我关闭它并重新运行我的代码,它工作了。

答案 6 :(得分:0)

此问题可能是由于在调整图像大小时传递了错误的图像类型。
解决方法是在调整图像大小之前添加一个检查:

if(type(image) == type(None)):
    pass
else:
    image = cv2.resize(image, (h, w), interpolation=cv2.INTER_AREA)

答案 7 :(得分:0)

我遇到了类似的问题,因为我正在从一个目录中读取多个图像,而该目录有一个 pdf 文件(愚蠢的),因此请确保您指定的路径只有图像。

答案 8 :(得分:-1)

在imread函数内的路径中添加双反斜杠