python - OpenCV Python的视频输出中的“无法解复用流”
问题描述
我正在尝试保存以下代码的视频输出。对我的其他代码(如斑点检测器)使用完全相同的组合,效果很好,但在我尝试计算背景时却不行。我可能做错了什么?代码本身运行良好,我只需要保存输出,fourcc 或大小是否有问题?
import numpy as np
import cv2
from skimage import data, filters
# Open Video
cap = cv2.VideoCapture('VID_Data-2021-07-08-17-53-54.mp4')
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
video = cv2.VideoWriter('output.avi', fourcc, 25, size)
# Randomly select 25 frames
frameIds = cap.get(cv2.CAP_PROP_FRAME_COUNT) * np.random.uniform(size=25)
# Store selected frames in an array
frames = []
for fid in frameIds:
cap.set(cv2.CAP_PROP_POS_FRAMES, fid)
ret, frame = cap.read()
frames.append(frame)
# Calculate the median along the time axis
medianFrame = np.median(frames, axis=0).astype(dtype=np.uint8)
# Display median frame
cv2.imshow('frame', medianFrame)
cv2.waitKey(0)
# Reset frame number to 0
cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
# Convert background to grayscale
grayMedianFrame = cv2.cvtColor(medianFrame, cv2.COLOR_BGR2GRAY)
while(ret):
# Read frame
ret, frame = cap.read()
# Convert current frame to grayscale
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Calculate absolute difference of current frame and
# the median frame
dframe = cv2.absdiff(frame, grayMedianFrame)
# Treshold to binarize
th, dframe = cv2.threshold(dframe, 10, 255, cv2.THRESH_BINARY) #was 30, 255
# Display image
cv2.imshow('frame', dframe)
video.write(frame) #added
cv2.waitKey(20)
# Loop over all frames
ret = True
# Release video object
video.release()
cap.release()
# Destroy all windows
cv2.destroyAllWindows()
解决方案
推荐阅读
- google-sheets - 如何制作一个生成动态谷歌表格的烧瓶网站
- python - TypeError: '>' 在'float' 和'str' 的实例之间不支持
- c# - 如何从 Xamarin Forms 代码打开或访问 Android 片段中的数据?
- javascript - 一旦条件为真,如何在 JavaScript 中中断 if/else 语句
- c# - C# 将字符串解析为具有特定时区的 DateTime
- onedrive - OneDrive 选择器未加载
- java - Spring-mongodb 查询不获取 LocalDate 参数的结果
- excel - VBA“if”语句是否能够根据当前单元格选择产生不同的结果?
- postgresql - docker SHM_SIZE /dev/shm:调整共享内存大小
- machine-learning - 我可以使用机器学习来确定最佳产品配置吗