我被要求拍摄一段视频,可能是一个简单的卡通片,并返回一系列场景
为了做到这一点,我需要使用opencv库,结果格式是无关紧要的(即我可以返回每个场景的时间跨度或实际分割视频)。
任何帮助都会得到满足。
由于
答案 0 :(得分:8)
从技术上讲, scene 是一组 shot ,它们在一个位置连续聚集在一起。 shot是视频的基本叙事元素,由连续视点呈现的多个帧组成。
自动将视频划分为其镜头称为shot boundary detection问题,其中基本思想是识别形成从一个镜头到另一个镜头的过渡的连续帧。
识别转换通常涉及计算两帧之间的相似度值。可以使用低级图像要素(如颜色,边缘或运动)计算此值。一个简单的相似性指标可能是:
其中 f1 和 f2 表示两个不同的视频帧, N 表示这些帧中的数字像素。这是两帧之间的平均一阶( Manhattan )像素颜色距离。
假设你有一个视频由 {f 1 ,f 2 ... f M } 并且您已经计算了相邻帧之间的距离。一个简单的决策措施可以标记从 f a 到 f b 的过渡作为镜头边界如果s( f a , f b )低于某个阈值< / em>的
成功的镜头边界检测器使用二阶(或更多)距离,例如 Euclidean 距离或 Pearson相关系数,并利用不同特征的组合而不是仅使用一,说颜色。
通常,相机或物体移动会破坏帧之间的像素对应关系。在直方图的帮助下使用低级细节的频率将是一种治疗方法。
此外,执行超过两帧的决策有助于找到平滑过渡,其中一个镜头溶解或替换另一个持续一段时间。确定一组帧也有助于我们识别由闪光或快速移动的相机引起的错误过渡。
对于您的问题,请从基本方法开始,例如比较视频帧之间的RGB颜色和边缘响应。分析您的结果和数据,并尝试调整新的功能,距离指标和决策制定方法,以获得更好的效果。
将视频细分为镜头的最佳方式会因您的数据而异。像高斯mixture models 或通过 support vector machines 分类的概率建模帧过渡的机器学习方法预计会比手动选择的阈值更好。但是,在有效选择输入要素之前,了解基础知识非常重要。
自动查找镜头边界足以将视频划分为有意义的部分。另一方面,将视频划分为场景被认为是一个更难的语义问题。然而,镜头分割是它的第一步。
答案 1 :(得分:2)
有一个巨大的研究领域专注于此。搜索论文,你可以找到详细描述的各种算法。
这里有一些例子:
Scene detection in Hollywood movies and TV shows
A framework for video scene boundary detection
Video summarization and scene detection by graph modeling
还有更多,只是google。