在opencv中计算相机的位置和方向

use*_*993 7 opencv

所以想象一下,有一台相机在看你的电脑屏幕.我要做的是确定相机旋转了多少,距离屏幕有多远,以及它相对于屏幕中心的位置.简而言之就是旋转和平移矩阵.

我正在使用opencv执行此操作,并按照他们的相机校准示例使用棋盘图案和来自网络摄像头的框架执行此任务.我想处理任何通用图像,即屏幕截图和网络摄像头的框架.

我尝试使用特征检测算法从两个图像中获取关键点列表,然后将这些关键点与BFMatcher匹配,但遇到了问题.特别是SIFT不能正确匹配关键点,并且SURF在缩放图像上没有正确找到关键点.

有没有更容易解决这个问题的方法?我觉得这是人们做过的常见事情,但在网上没有找到太多讨论.

谢谢!!

Jav*_*ock 5

寻找自然平面标记是计算机视觉中的一项常见任务,但在您的情况下,您的屏幕会根据您在屏幕上可视化的内容而变化,它可以是您的桌面、浏览器、电影……

因此,您不能应用通常的方法进行标记检测,您应该尝试形状识别。一个想法是在屏幕框架相同尺寸(通过不同比例)的矩形模板上尝试粒子过滤器,应用第一个边缘检测。

粒子过滤器将使模板适合框架的区域。这样做之后,你就会知道这个位置了。对于方向,您需要计算单应性,并且为此需要“标记”中的 4 个点,因此您可以应用直接线性变换(cv::findHomography() 为您完成此操作)。所以你的四个点可以是四个角。这只是一个想法,祝​​你好运!