首页 > 解决方案 > 在 python 中将 mp4 视频文件转换为灰度并获取 Source is empty 错误

问题描述

无法将视频媒体文件夹导入程序以转换为灰度。

import cv2 
import numpy as np

# The video feed is read in as a VideoCapture object
cap = cv2.VideoCapture(r'C:\Users\Mark\Desktop\Research\Source\Video\Traffic01.mp4')

# ret = a boolean return value for getting the frame
ret, first_frame = cap.read()

# Converts frame to grayscale
prev_gray = cv2.cvtColor(cv2.UMat(first_frame), cv2.COLOR_RGB2GRAY)

while(cap.isOpened()):

    # ret = a boolean return value from getting the frame
    ret, frame = cap.read()

    # Converts each frame to grayscale 
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Frames are read by intervals of 10 milliseconds. 
    #The programs breaks out of the while loop when the user presses the 'q' key
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

错误:OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: 错误: (-215:Assertion failed) !_src.empty() in function 'cv ::cvtColor'

标签: pythonopencvvideovideo-capturegrayscale

解决方案


为什么那个UMat在那里?这似乎可以回答 openCV UMat 文档中的问题 src.empty() is/does :- 构造 2D 矩阵并用指定的值 _s 填充它。而 cvtcolor 想要一个源图像/帧

另外,为什么第一帧如此重要,它必须在主循环之外?

我的建议是在您的 while 循环之前注释掉第一行 cap.read() 和 cv2.cvtcolor() 行。高温高压


推荐阅读