как исправить это "OSError: невозможно идентифицировать файл изображения" OpenCV imwrite на самом деле не сохраняет изображение - PullRequest
0 голосов
/ 26 октября 2019

Я изучаю 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 add

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

если не в imshow для цикла

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 голосов
/ 26 октября 2019

Если вы используете

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 показывает для этого размер 0.jpg - и вы не можете открыть пустой файл.

Вам нужно по крайней мере

top = 200
bottom = top + 1  # 201

left = 200
right = left + 1  # 201

, чтобы создать файл с одним пикселем - frame[200:201,200:201].


Если вы используете print() для отображения результата из imwrite()

print(cv2.imwrite(...))

, тогда вы получите False, если возникла проблема с сохранением файла.

...