OpenCV Python Assertion Failed

Я пытаюсь запустить opencv-python==3.3.0.10 на macOS 10.12.6, чтобы прочитать файл и показать видео в окне. Я точно скопировал код отсюда http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html, раздел "Воспроизведение" видео из файла.

Код работает правильно и показывает видео, однако после завершения видео он ломает программу, выдавая следующую ошибку:

Ошибка подтверждения: (ec == 0), разблокировка функции, файл /BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxx/libcxx-307.5/src/mutex.cpp, строка 48.

Кто-нибудь имеет представление о том, что может вызвать это?


Фрагмент кода для вашего удобства (отредактирован для включения некоторых предложений в комментарии)

cap = cv2.VideoCapture('vtest.avi')

while(True):
    ret, frame = cap.read()

    if not ret:
        break

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

 cv2.destroyAllWindows()

1 ответ

Это не ясно из вашего вопроса, но похоже, что вы определенно сталкиваетесь с ситуацией, когда видео завершается без прерывания воспроизведения. Я думаю, проблема в том, что объект VideoCapture к тому времени уже закрыт cap.release(), Я бы рекомендовал позвонить release внутри if заявление к перерыву.

У меня не было времени на эксперименты, но я обычно следую этой схеме:

reader = cv2.VideoCapture(<stuff>)
while True:
  success, frame = reader.read()
  if not success:
     break

Мне не пришлось звонить release явно в этих контекстах.

Другие вопросы по тегам