首页 > 解决方案 > 如何检查视频中的一组连续帧是否相同?

问题描述

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

标签: pythonopencvvideoframe

解决方案


最明显的变体是计算像素级绝对差异。如果你有高分辨率视频,你可以通过缩小帧来牺牲性能的准确性,因此整体画面应该不会有太大变化。

对于每一帧执行:

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

在此之后,您可以根据需要操作差异,例如查找每个段的差异总和或平均差异等。您还可以测试不同的颜色空间,但请记住它们可以在通道之间具有不同的值范围,因此其中一些需要标准化。

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


推荐阅读