我目前正在构建视频轨道(来自相机)和音频轨道(来自微型)之间的自动同步处理。为了做到这一点,我计划构建一个小型web应用程序,它将在我的智能手机(例如:Iphone)上显示拍板,并在我被拍摄时发出特定的声音。之后,我将执行一个小的OpenCV应用程序(实际上是JavaCV),它将检测我的智能手机显示拍手的图像。对我来说,剩下的只有找到同步这两首歌的特定的hip了。
你可以看到这里(http://vimeo.com/47002882)和这里(http://vimeo.com/46213073)视频,我们已经建立和手动同步。根据之前视频的背景(距离、光线等),你觉得什么是你可以随时检测到的最好的东西(形状、颜色或其他)?我应该用什么样的变换呢?
你一定要想象一下,我会用智能手机展示拍板,相机将放置在离我5 - 7米的地方。
我构建了第一个基本的clapper (http://jsbin.com/zuqumiso/45/),并使用OpenCV进行视频处理,如下所示:
Frame -> RGB到GRAY转换-> GaussianBlur -> AdaptativeThreshold -> thought Transformation(标准)来检测线条。
但是只有当我的智能手机离相机30厘米时,它才有效。
考虑到视频中您的手机屏幕非常小,我认为您无法自动检测到手机上显示的任何标准标记(例如QR码,圆圈或棋盘)。
如果我是你,我会尝试一个更简单的方法。我会首先在手机上显示一个全屏闪烁的黑白图案。如果手机保持相当稳定,这应该能够检测闪烁区域,因为在几个连续帧中强度变化最高。然后,对于音频/视频同步,我会同时发出哔哔声,并将全屏模式转换为特定的颜色(例如亮红色或亮绿色)。同样,这种从黑/白到完全饱和的颜色的过渡应该很容易被检测到,通过检测之前识别的闪烁区域的颜色饱和度不连续性。
当你问这个问题的时候,这可能不是你想要的,但是考虑到你对电话/相机距离的严格限制,我认为没有别的办法了。
大多数图像算法通过观察过渡(即;边缘)。由于您的相机是RGB相机,理想的可检测边缘应该是所有颜色都可见的边缘。
最简单的选择是使用简单的QR码。它的边缘很容易检测,你甚至可以区分多个代码。
形状和颜色往往比QR码更变幻无常。