我已开始使用视频创建长场景的线性/条形全景图。这意味着全景图不围绕中心旋转,而是平行于场景移动,例如。 vid凸轮安装在垂直于街道立面的车辆上。
我将遵循的步骤是:
到目前为止,我已经能够保存视频中的单个帧并仅在两个图像上完成SURF特征检测。我不是要求有人来解决我的整个项目,但是我很难尝试在捕获的剩余帧上完成SURF检测。
问题:如何将SURF检测应用于连续帧?我将它保存为YAML或xml吗?
对于我的特征检测,我使用了OpenCV的示例find_obj.cpp,并且只更改了使用的图像。
有没有人经历过这样的项目?我希望实现的一个例子来自Iwane technologies http://www.iwane.com/en/2dpcci.php
答案 0 :(得分:1)
在处理类似的项目时,我创建了std::vector
个SURF关键点(包括点和描述符),然后使用它们来计算成对匹配。
在逐帧阅读电影时填充向量,但它与图像序列的作用相同。
没有足够的点来使你的记忆饱和(并使用yml / xml文件),除非你的资源非常有限或者序列很长。
请注意,至少在大多数标准情况下,您不需要特征跟踪部分:SURF描述符匹配也可以为您提供单应性估计(无需跟踪)。
读取矢量
首先声明Mat的向量,例如std::vector<cv::Mat> my_sequence;
。
然后,您有两个选择:
要么您知道帧数,那么您将向量调整到正确的大小。然后,对于每个帧,使用my_sequence.at(i) = frame.clone();
或frame.copyTo(my_sequence.at(i));
或者您事先不知道尺寸,只需像往常一样调用push_back()
方法:my_sequence.push_back(frame);