我试图在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()
答案 0 :(得分:1)
您的问题并不清楚,但看起来您已经特意遇到视频完成播放而不会被打断的情况。我认为的问题是,当您到达cap.release()
时,VideoCapture对象已经关闭。我建议在休息时间内将release
语句中的if
调用放入其中。
我没有时间进行实验,但我通常会遵循这种模式:
reader = cv2.VideoCapture(<stuff>)
while True:
success, frame = reader.read()
if not success:
break
我不必在这些情境中明确地致电release
。