cv2.error: OpenCV(4.2.0) ..\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'


考虑到可能是视频末尾读取帧不正确导致的。
查看变量管理器发现,在播放时按下’q’键退出,控制台不会报错,ret变量值为True;播放到末尾时,控制台报错,ret变量值为False。
到这里问题的原因就比较明朗了——ret(return value缩写)是一个布尔值,表示当前这一帧是否获取正确。视频播放到最后一帧后,程序并没有停止读取文件,而是继续读取(此时视频文件内已经没有数据供程序读取了),读不出数据,自然就报错了。找到了问题,解决方案也就有了:读完最后一帧以后,ret == False时跳出while循环,结束程序就行了

import cv2
cap = cv2.VideoCapture('E:/pycharm/deep_learning/output.avi')  # 精确到根目录
while(cap.isOpened()):
    ret, frame = cap.read()
    # 第一个参数ret 为True 或者False,代表有没有读取到图片
    # 第二个参数frame表示截取到一帧的图片
    if ret == True:
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        cv2.imshow('frame', gray)
    else:
        break
    if cv2.waitKey(30) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

 

posted @ 2020-11-01 23:03  wgx_wayne  阅读(2520)  评论(0)    收藏  举报