【发布时间】:2019-09-03 10:04:35
【问题描述】:
我编写的代码能够通过跳过没有运动的帧来创建视频摘要。但是保存输出视频的时间是视频时长的 10 倍以上。所以任何人都可以帮助我对代码进行一些更改。这不是系统配置的问题。我什至在 i7 GPU 系统中都试过了。
import cv2
import imutils
vs = cv2.VideoCapture("example_01.mp4")
fgbg = cv2.createBackgroundSubtractorMOG2()
pathOut = "output.mp4"
frame_array = []
while True:
ret,frame = vs.read()
forig = frame.copy()
height,width,layers = frame.shape
size = (width,height)
blurred = cv2.GaussianBlur(frame, (11, 11), 0)
gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY)
mask = fgbg.apply(gray)
mask = cv2.erode(mask, None, iterations=2)
mask = cv2.dilate(mask, None, iterations=2)
cnts = cv2.findContours(mask.copy(),
cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
cv2.imshow('mask',mask)
for c in cnts:
area = cv2.contourArea(c)
if area > 2000:
frame_array.append(frame)
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'MPEG'), 20,
size)
for i in range(len(frame_array)):
out.write(frame_array[i])
out.release()
cv2.imshow("Frame", frame)
key = cv2.waitKey(25)
if key == ord("q"):
break
vs.release()
cv2.destroyAllWindows()
【问题讨论】:
-
如果你想保存,我不会浪费时间展示它。
-
您应该只创建一次
out- 在while True之前。并且只在文件中写入新帧 - 并非所有帧都在非常循环中一次又一次地写入。
标签: python opencv video-streaming frames