python - 在 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'
解决方案
为什么那个UMat在那里?这似乎可以回答 openCV UMat 文档中的问题 src.empty() is/does :- 构造 2D 矩阵并用指定的值 _s 填充它。而 cvtcolor 想要一个源图像/帧
另外,为什么第一帧如此重要,它必须在主循环之外?
我的建议是在您的 while 循环之前注释掉第一行 cap.read() 和 cv2.cvtcolor() 行。高温高压
推荐阅读
- python - 我的模型不学习,用 LSTM 进行文本分类
- node.js - 由于在建立安全 TLS 连接之前断开客户端网络套接字而导致的 aws lambda 错误
- javascript - 仅当用户使用 React Js Context API 登录时,如何获取数据?
- python - 无法绘制 Plotly - 说“x”的值不是列的名称
- r - 计算断开连接图的接近度
- r - 如何读取有关 R 函数的元数据?
- javascript - Javascript 错误:.remove 不是函数
- php - PHP头位置变量重定向和主页输出
- java - 我想知道如何在 spark withColumn 中使用过滤器计数
- sql - 尝试在 Laravel 7 中查看不同内容时,刀片视图上的 ErrorException 未定义变量