如何检查视频中的一组连续帧是否相同?

问题描述

我有一组来自视频的连续帧。像这样 ({F1,F20},{F34,F40},{F89,F200})。因此,这里从F1到F20代表一个片段或一系列帧。我的问题是我怎么知道哪个段具有最大的可变性,因为一个段中的大多数帧都非常相似。在这种情况下,我希望第二段成为输出

解决方法

最明显的变体是计算像素方向的绝对重量差。如果您有高分辨率的视频,则可以通过缩小帧来牺牲性能的准确性,因此,总体图像应该不会有太大变化。

每帧执行一次:

curr_frame =  # ... however you get it
curr_frame_downscaled = cv2.resize(curr_frame,(400,400),cv2.INTER_AREA)
diff_index = np.sum(np.abs(curr_frame_downscaled - prev_frame_downscaled))
prev_frame_downscaled = curr_frame_downscaled

此后,您可以根据需要操作diff。您可以测试不同的色彩空间,但请记住,它们在通道之间可以具有不同的值范围,因此其中一些需要归一化。

我对您的细分市场一无所知。尽管只有两种帧状态,但每帧交换白屏和黑屏的视频将被认为是极其不同的。以此方式尝试对之前带有np.diff()的帧进行排序。