我正在尝试将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。
答案 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)
另一种可能性是图像width
或height
可能为零:
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函数内的路径中添加双反斜杠