如何解决此问题:“ OSError:无法识别图像文件” Opencv imwrite实际不保存图像

时间:2019-10-25 22:38:57

标签: python image opencv face-recognition

我现在正在从这个git学习Opencv

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

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

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

我尝试将格式文件更改为jpg,bmp,png 将这些代码移入/移出for循环 添加

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”

1 个答案:

答案 0 :(得分:0)

如果您使用

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