我也遇到了类似的错误,所以我认为与其打开一个新问题,不如在这里收集所有问题,因为已经有一些有用的答案......
我的代码(在 Python 中使用 OpenCV 打开视频的教科书代码):
import cv2 as cv
import os
path = 'C:/Users/username/Google Drive/Master/THESIS/uva_nemo_db/videos/'
os.chdir(path)
video_file = '001_deliberate_smile_2.mp4'
cap = cv.VideoCapture(video_file)
if not cap.isOpened():
print("Error opening Video File.")
while True:
# Capture frame-by-frame
ret, frame = cap.read()
cv.imshow('frame',frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
# if frame is read correctly, ret is True
if not ret:
print("Can't retrieve frame - stream may have ended. Exiting..")
break
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()
我目瞪口呆的原因是我遇到了同样的错误——但是——视频实际上是在播放的……当运行代码时,Python 解释器会打开一个运行视频的 Python 实例。一旦视频结束,它就会跳出循环,关闭视频并抛出错误:
Traceback(最近一次调用最后一次):
文件“C:/Users/username/Documents/smile-main/video-testing.py”,第 24 行,在
cv.imshow('frame',frame)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\opencv\modules\highgui\src\window.cpp:376: 错误: ( -215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
如有任何意见,我将不胜感激!
**
编辑:我是如何修复错误的!
**
我将我的代码封装在 try/except 中,如下所示:
# Import required libraries
import cv2 as cv
import os
path = 'C:/Users/username/Google Drive/Master/THESIS/uva_nemo_db/videos/'
# test_path = 'C:/Users/username/Downloads'
os.chdir(path)
os.getcwd()
video_file = '001_deliberate_smile_2.mp4'
cap = cv.VideoCapture(video_file) #cap for "Video Capture Object"
if not cap.isOpened():
print("Error opening Video File.")
try:
while True:
# Capture frame-by-frame
ret, frame = cap.read()
cv.imshow('frame',frame)
if cv.waitKey(1) & 0xFF == ord('q'):
break
# if frame is read correctly, ret is True
if not ret:
print("Can't retrieve frame - stream may have ended. Exiting..")
break
except:
print("Video has ended.")
# When everything done, release the capture
cap.release()
cv.destroyAllWindows()
如果视频播放正常,为什么会弹出这个错误,以及为什么 try/except 消除了它,我仍然很感激。
谢谢!