Я видел много изображений, где он содержит средний цвет каждого кадра, поэтому я попробовал это сам.
Этот код будет усреднять цвет x
количества кадров в зависимости от FPS видео.
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
, последние кадры не будут обработаны. Как я могу обработать эти кадры?