#python #opencv #runtime-error
#python #opencv #время выполнения -ошибка
Вопрос:
Я пытаюсь захватывать изображение каждые 5 секунд в Opencv с помощью моей веб-камеры, однако при каждой попытке я получаю сообщение об ошибке.
Код Python:
def imgcap():
cap = cv2.VideoCapture(0)
framerate = cap.get(5)
x=1
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
if ret:
# Our operations on the frame come here
filename = 'Captures/capture' str(int(x)) ".png"
x=x 1
cv2.imwrite(filename, frame)
time.sleep(5)
if cv2.waitKey(1) amp; 0xFF == ord('q'):
break
else:
print("Ret False")
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
imgcap()
imgcap()
Ошибка, которую я получаю:
File "vision.py", line 30, in <module>
imgcap()
File "vision.py", line 21, in imgcap
cv2.imwrite(filename, frame)
cv2.error: OpenCV(4.5.1) C:UsersappveyorAppDataLocalTemp1pip-req-build-oduouqigopencvmodulesimgcodecssrcloadsave.cpp:753: error: (-215:Assertion failed) !_img.empty() in function 'cv::imwrite'
Ответ №1:
Проблема в том, что вы выпускаете cap
экземпляр внутри цикла. Вы не сможете читать cap
со 2-й итерации:
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# comment this
# cap.release()
# Our operations on the frame come here
filename = 'Captures/capture' str(int(x)) ".png"
#... other code
Комментарии:
1. Поэтому удалите первый
cap.release()
. Тот, который сразу послеret, frame = cap.read()
?2. @Reacher42 да, выпускайте экземпляр только тогда, когда закончите с ним, т. Е. Сохраните предыдущий
cv2.destroyAllWindows()
. Также проверьтеret == True
, успешно лиcap.read()
это.3. Всякий раз, когда я запускаю этот код (я обновил его в сообщении), он просто загружается в мою командную строку бесконечно. что я сделал не так?
4. Вы можете (только) прервать цикл, нажав
q
клавишу, указанную в вашем коде.5. Но окно, в котором оно должно отображаться, больше даже не появляется, что наводит меня на мысль, что есть проблема