【问题标题】:OpenCV/Python crashes after playing a video播放视频后 OpenCV/Python 崩溃
【发布时间】:2019-06-03 21:12:38
【问题描述】:

我将通过教程学习 OpenCV。我有一个问题。当我运行这段代码时:

import cv2
cap = cv2.VideoCapture('C:\Users\wg\174037210.avi')
while(cap.isOpened()):
    ret, frame = cap.read()
    cv2.imshow('Video', frame)
    if cv2.waitKey(75) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

这是普通的视频显示代码,视频结束后我收到此错误:

Traceback(最近一次调用最后一次):文件 “C:/Users/wg/python/video-test.py”,第 15 行,在 cv2.imshow('Video', frame) cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:356: 错误:(-215:断言失败)size.width>0 && size.height>0 in 函数'cv::imshow'

环境如下:
Windows 7 Professional
Python 3.6.5
OpenCV 3.4.3

非常感谢任何帮助。谢谢!

【问题讨论】:

  • 您是否尝试使用其他文件?该错误基本上意味着您正在显示一个空图像,或者在这种情况下是一个空框架。
  • 我尝试了 3 或 4 个视频,结果都一样 - 崩溃了。
  • 好的,我更改了一些内容并发布了答案。看看有没有帮助?
  • 尝试使用以.mp4结尾的视频

标签: python opencv


【解决方案1】:

试一试:

import cv2

video = cv2.VideoCapture(filePath)   
frames_counter = 1

while True:
    frames_counter = frames_counter + 1
    check, frame = video.read()
    # print(frame)
    # print(check)
    if check:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow("Capturing", gray)
        key = cv2.waitKey(1)
    else:
        break

print("Number of frames in the video: ", frames_counter)
video.release()
cv2.destroyAllWindows()

【讨论】:

  • 太棒了!您的代码有效。为什么示例代码不起作用而您的代码起作用了?看来您检查帧是否包含数据,否则它将停止。如果需要,为什么教程示例代码会省略此检查和错误处理
  • @WBusse 完美!好吧。我不知道您遵循了哪个 tute,但对我来说,首先检查框架并仅显示它更有意义。您可以标记答案以接受答案,干杯!
  • if check == True: 可以是 if check:。示例代码崩溃是因为到视频结尾,frameNone 不能被 imshow 显示,如断言错误中所述
  • @QuangHoang 注意到并修复了! :)
猜你喜欢
  • 1970-01-01
  • 2014-10-04
  • 2014-10-24
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 1970-01-01
相关资源
最近更新 更多