2

我正在尝试在 macOS 10.12.6 上运行 opencv-python==3.3.0.10 以从文件中读取并在窗口中显示视频。我已经从这里完全复制了代码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()
4

1 回答 1

1

您的问题尚不清楚,但看起来您特别遇到了视频完成播放而不会被中断的情况。我认为问题在于 VideoCapture 对象在您到达cap.release(). 我建议在休息时将调用release放在if语句内部。

我没有时间进行实验,但我通常遵循以下模式:

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

release在这些情况下,我不必显式调用。

于 2017-11-09T16:49:09.947 回答