Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 帧之间的OpenCV平移/旋转位移?_C++_Opencv_Rotation_Translation - Fatal编程技术网

C++ 帧之间的OpenCV平移/旋转位移?

C++ 帧之间的OpenCV平移/旋转位移?,c++,opencv,rotation,translation,C++,Opencv,Rotation,Translation,我目前正在研究一种低分辨率相机的使用方法,该相机垂直面向地面固定高度,以测量相机通过地面的速度。使用C++的OpenCV 2.1, 由于整个背景将在连续帧之间不断移动、平移和/或旋转,在确定“可用值”形式的帧位移时,最合适的方法是什么?返回帧位移的函数?然后根据摄像机的高度和现实世界中拍摄到的帧的帧区域尺寸,我可以根据帧位移计算现实世界中的位移,然后计算测量时间间隔的速度 尝试确定我的方法,或者是否有任何示例代码可用,将帧位移或一组像素的位移转换为基于相机高度的距离位移 谢谢, Josh.这取决

我目前正在研究一种低分辨率相机的使用方法,该相机垂直面向地面固定高度,以测量相机通过地面的速度。使用C++的OpenCV 2.1,

由于整个背景将在连续帧之间不断移动、平移和/或旋转,在确定“可用值”形式的帧位移时,最合适的方法是什么?返回帧位移的函数?然后根据摄像机的高度和现实世界中拍摄到的帧的帧区域尺寸,我可以根据帧位移计算现实世界中的位移,然后计算测量时间间隔的速度

尝试确定我的方法,或者是否有任何示例代码可用,将帧位移或一组像素的位移转换为基于相机高度的距离位移

谢谢,
Josh.

这取决于你在计算机视觉方面的知识。首先,我将使用opencv可以提供的功能。请看一看

您需要的是首先提取特征点,例如sift或surf,然后使用其内置的匹配算法来匹配从两帧中提取的点。每一个匹配都会给你一些约束,你最终会得到一个过饱和的Ax=B

当然,在离线状态下进行实验,即先拍摄视频,然后对单个图像进行操作

更新:

在多摄像机校准的情况下,您的目标是确定每个摄像机的3D位置,这正是您所拥有的。想象一下,与移动单个摄像机不同,您拥有的摄像机数量与单个摄像机捕获的视频中的图像数量一样多,并且您希望知道每个摄像机位置的3D位置,这表示单个移动摄像机拍摄的每个图像的位置

有一个矩阵,您可以将世界上的任何三维点映射到图像上的二维点。摄像机矩阵由两部分组成,内参数和外参数。我可能不准确地把内参数称为内矩阵。内在参数包括单个相机的静态参数,例如焦距,而外在参数包括相机的位置和旋转


现在,一旦你有了你的相机和匹配点的内在参数,你就可以把很多参数叠加在一起,然后为你所有匹配点和所有外在参数的实际3D位置求解系统

如上所述,给定兴趣点,您可以使用opevcv找到平移变换

此外,如果您可以假设变换会稍微小一些并且接近线性,那么您可以只比较两个连续帧的图像像素来找到最佳匹配。有了足够的下采样,这不会花费太长时间,根据我的经验,效果相当不错


祝你好运

这项任务并非微不足道。想象一下,如果你的地面没有纹理,你已经迷路了。你有什么样的背景?或者你有什么兴趣点?是的,存在一些明显的限制,比如照明、纹理,但是对于测试,我将确保表面上存在纹理/图案。表面可以是砌砖、瓷砖、室内/室外表面等。很难说我将使用的确切兴趣点,因为表面会随着环境的变化而变化,我在测试之前/之后会记录限制因素。嗨,Chaiy,一旦提取特征点,您是否熟悉确定x/y平移和帧间旋转的方法?理想情况下,我将单独计算翻译和rotation@Josh您的任务类似于多摄像机校准问题,即从包含相同对象的不同摄像机拍摄图像,目标是确定每个摄像机的位置。在你的例子中,一旦你有了单台相机的内部参数,你就可以计算每次拍摄的位置。是的,即使我使用的是单台相机。很抱歉提出这些问题,我有C/++背景,我正在慢慢阅读一些学习书籍中的OpenCV。您指的是从SURF函数中提取的内部参数吗?SURF的处理速度似乎比SIFT快。不确定这将如何涉及多摄像机校准,因为我只使用一台摄像机?如何提取帧之间发生的旋转和平移矩阵?结果与此类似;例如,输出平移和旋转,以像素和度数为单位,我可以根据相机高度计算出真实世界的平移和旋转,请参见我的更新。不,内部参数是相机的固有参数。是的,问题的目标是获取视频中所有图像的外部参数。