OpenCV Python断言失败

OpenCV Python断言失败,python,opencv,opencv3.0,opencv-python,Python,Opencv,Opencv3.0,Opencv Python,我试图在macOS 10.12.6上运行opencv python==3.3.0.10,以读取文件并在窗口中显示视频。我完全复制了这里的代码,从文件中“播放”视频部分 代码正确运行并显示视频,但视频终止后会中断程序,导致以下错误: 断言失败:(ec==0),函数解锁,文件/BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxx/libcxx-307.5/src/mutex.cpp,第48行 有人知道这是什么原因吗 为方便您而编写的代码段(经过

我试图在macOS 10.12.6上运行opencv python==3.3.0.10,以读取文件并在窗口中显示视频。我完全复制了这里的代码,从文件中“播放”视频部分

代码正确运行并显示视频,但视频终止后会中断程序,导致以下错误:

断言失败:(ec==0),函数解锁,文件/BuildRoot/Library/Caches/com.apple.xbs/Sources/libcxx/libcxx-307.5/src/mutex.cpp,第48行

有人知道这是什么原因吗


为方便您而编写的代码段(经过编辑以在注释中包含一些建议)


你的问题并不清楚,但你似乎特别遇到了这样一种情况,即视频在不被中断的情况下完成播放。我认为问题在于,当您到达
cap.release()
时,VideoCapture对象已经关闭。我建议在休息时将对
release
的调用放在
if
语句中

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

reader = cv2.VideoCapture(<stuff>)
while True:
  success, frame = reader.read()
  if not success:
     break
reader=cv2.VideoCapture()
尽管如此:
成功,frame=reader.read()
如果不成功:
打破

在这些上下文中,我不必显式地调用
release

阅读框架后,如果ret==False:break,请添加
。谢谢您的评论。我确实补充了这一点,但仍然没有解决问题。我试图在循环之后放置一个标志,但是程序没有到达那里。它似乎没有跳出循环..注释掉
cap.release()
函数并使用
而不是True:…
。输出是什么?它给了我同样的错误。显然,GitHub for mac上存在一个相关问题:好的,如果我取消注释cv2.destroyAllWindows(),它似乎停止崩溃。知道为什么吗?谢谢你的回答。这并没有解决问题。它确实会中断循环,但是如果在之后立即崩溃(没有执行循环之后的任何事情),那么如果我取消注释cv2.destroyAllWindows(),它似乎会停止崩溃。知道为什么吗?在脚本开头使用
cv2.namedWindow('frame')
怎么样?
reader = cv2.VideoCapture(<stuff>)
while True:
  success, frame = reader.read()
  if not success:
     break