gpt4 book ai didi

python - 用于生成视频摘要的优化方法?

转载 作者:行者123 更新时间:2023-12-02 17:04:03 26 4
gpt4 key购买 nike

我编写的代码能够通过不动的跳过帧来创建视频摘要。但是保存输出视频要花费视频持续时间的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()

最佳答案

我拍了18秒的电影,您的代码在旧计算机上工作了很多分钟,并且速度变慢,所以最终我杀死了它,但没有得到输出电影。

这段代码大约需要57秒才能完成。如果我不显示窗口,则需要39秒。

我只打开一次out。我没有将frame附加到frame_array,而是直接将此一帧写入文件。

import cv2
import imutils
import time

vs = cv2.VideoCapture("Wideo/1-sierpinski-carpet-turtle.mp4")
fgbg = cv2.createBackgroundSubtractorMOG2()
pathOut = "output.mp4"

out = None

start = time.time()

while True:
ret, frame = vs.read()

if frame is None:
break

forig = frame.copy()
height, width, layers = frame.shape
size = (width, height)

if not out:
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'MPEG'), 20, size)

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:
out.write(frame)
break # don't check other areas

cv2.imshow("Frame", frame)
key = cv2.waitKey(25)

if key == ord("q"):
break

end = time.time()
print("time:", end-start)

out.release()
vs.release()
cv2.destroyAllWindows()

您的代码一次又一次打开文件,并一次又一次地写入所有帧-因此,它在我的计算机上速度变慢。您最终只能在循环后编写一次。
import cv2
import imutils
import time

vs = cv2.VideoCapture("Wideo/1-sierpinski-carpet-turtle.mp4")
fgbg = cv2.createBackgroundSubtractorMOG2()
pathOut = "output.mp4"

frame_array = []

start = time.time()

while True:
ret, frame = vs.read()

if frame is None:
break

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)
break

cv2.imshow("Frame", frame)
key = cv2.waitKey(25)

if key == ord("q"):
break

# --- after loop ---

out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'MPEG'), 20, size)
for frame in frame_array:
out.write(frame)
out.release()

end = time.time()
print("time:", end-start)

vs.release()
cv2.destroyAllWindows()

关于python - 用于生成视频摘要的优化方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769415/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com