【问题标题】:OpenCV Python Assertion FailedOpenCV Python 断言失败
【发布时间】:2017-11-09 16:27:06
【问题描述】:

我正在尝试在 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 行。

有人知道是什么原因造成的吗?


为方便起见编写代码 sn-p(已编辑以在评论中包含一些建议)

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()

【问题讨论】:

  • 阅读框后添加if ret == False: break
  • 感谢您的评论。我确实添加了,但仍然没有解决问题。我试图在循环之后放置一个标志,而程序没有到达那里。好像没有跳出循环..
  • 注释掉cap.release()函数并使用while True: ...。输出是什么?
  • 它给了我同样的错误。显然在 GitHub for mac 上有一个相关问题:github.com/dthpham/butterflow/issues/12
  • 好的,如果我取消注释 cv2.destroyAllWindows() 它似乎停止崩溃。任何想法为什么?

标签: python opencv opencv3.0 opencv-python


【解决方案1】:

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

我没有时间尝试,但我通常遵循以下模式:

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

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

【讨论】:

  • 感谢您的回答。它没有解决问题。它确实打破了循环,但如果在之后立即崩溃(循环后的任何内容都没有执行)
  • 好的,如果我取消注释 cv2.destroyAllWindows() 它似乎停止崩溃。任何想法为什么?
  • 在脚本开头使用cv2.namedWindow('frame')怎么样?
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 2014-02-10
  • 1970-01-01
  • 2012-11-26
  • 2014-11-24
  • 2014-05-28
  • 2020-12-31
  • 2015-09-12
相关资源
最近更新 更多