我已经看到了很多图片,其中包含了每一帧的平均颜色,所以我自己尝试了
此代码将根据视频的FPS来平均x
帧量的颜色
import cv2
import numpy as np
cap = cv2.VideoCapture("video.mp4")
fcount = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
duration = fcount/fps
image = np.zeros((500, round(fcount/fps), 3), np.uint8)
print("FPS: %s, COUNT %s, DURATION %s" %(fps,fcount,duration))
frames = []
framespos = 0
framesprocessed = 0
framesremain = fcount % fps
while True:
flag,frame = cap.read()
if flag:
avg_color_per_row = np.average(frame, axis=0)
avg_colors = np.average(avg_color_per_row, axis=0)
avg_color_int = np.array(avg_colors, dtype=np.uint8)
frames.append(avg_color_int)
if len(frames) == fps:
image[:,[framespos]] = np.average(frames, axis=0)
framespos += 1
framesprocessed += fps
print("%s/%s" %(framesprocessed,fcount))
frames.clear()
else:
cv2.imwrite('averages.png',image)
print("TOTAL FRAMES: %s, PROCESSED FRAMES %s, UNPROCESSED FRAMES %s" %(fcount,framesprocessed,fcount%fps))
cap.release()
break
这将写下这样的内容:
此代码工作正常,但不会处理所有帧。如果fcount % fps > 0
,那些最后的帧就不会得到处理。如何处理这些帧
我刚刚在
else
添加了这段代码,检查是否有余数帧,同时检查frames
数组是否有内容,然后将内容附加到image
数组相关问题 更多 >
编程相关推荐