how to fix this"OSError: cannot identify image file " Opencv imwrite doesn't actually save image

how to fix this"OSError: cannot identify image file " Opencv imwrite doesn't actually save image

我现在正在学习 Opencv git

https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py

并添加一些代码来捕获图像,它确实捕获图像并将其保存到我指定的路径 但它不显示它保存的图像(抱歉,我不知道该怎么称呼它)它说不支持这种格式文件

![1]: https://ibb.co/zXp7PmY

我尝试将格式文件更改为 jpg、bmp、png 移动了 for 循环的这些代码 in/out 添加

top = 200
right = 200
bottom = 200
left = 200

如果不在 imshow for 循环中

poor_match_index = np.argmax(face_distances)            
           if matches[poor_match_index]:
               cv2.imwrite("tanapat/unknown_" + str(count) + ".jpg", frame[right:left,top:bottom]) 
               unknown = face_recognition.load_image_file("tanapat/unknown_"+ str(count) +".jpg")
               unknown_encoding = face_recognition.face_encodings(unknown )[0]
               known_face_encodings.append(unknown_encoding)
               known_face_names.append("unknown_"+str(count))
               name = known_face_names[poor_match_index]
               count +=1
               break

我试着让它重复捕捉新面孔并识别它(尽量不要让它继续捕捉同一个人太多帧)

但在线出错

unknown = face_recognition.load_image_file("tanapat/unknown_"+ str(count) +".jpg")

OSError: 无法识别图像文件'tanapat/unknown_0.jpg'

如果你使用

top = 200
right = 200
bottom = 200
left = 200

然后 frame[200:200,200:200] 创建空数组。

 width = right - left = 200 - 200 = 0
 height = bottom - top = 200 - 200 = 0

当您保存空数组时,您会得到空文件 - 我的 Linux 显示此 .jpg 的大小为 0 - 你无法打开空文件。

你至少需要

top = 200
bottom = top + 1  # 201

left = 200
right = left + 1  # 201

创建一个像素的文件 - frame[200:201,200:201]


如果您使用 print() 来显示来自 imwrite()

的结果
print(cv2.imwrite(...))

如果保存文件有问题,你会得到 False