平均剩余帧的颜色

2024-10-02 06:34:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经看到了很多图片,其中包含了每一帧的平均颜色,所以我自己尝试了

此代码将根据视频的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

这将写下这样的内容:

barcode

此代码工作正常,但不会处理所有帧。如果fcount % fps > 0,那些最后的帧就不会得到处理。如何处理这些帧


Tags: imageframesnpcv2colorintavgcap
1条回答
网友
1楼 · 发布于 2024-10-02 06:34:35

我刚刚在else添加了这段代码,检查是否有余数帧,同时检查frames数组是否有内容,然后将内容附加到image数组

if framesremain > 0 and len(frames) > 0:
    image[:,[framespos]] = np.average(frames, axis=0)
    framesprocessed += framesremain
    print("%s/%s" %(framesprocessed,fcount))

相关问题 更多 >

    热门问题