【问题标题】:Calculating a camera's position and orientation in opencv在opencv中计算相机的位置和方向
【发布时间】:2012-06-18 14:59:56
【问题描述】:

所以想象一下,有一个摄像头正盯着你的电脑屏幕。我要做的是确定相机旋转了多少,离屏幕有多远,以及它相对于屏幕中心的位置。简而言之就是旋转和平移矩阵。

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

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

这个问题有更简单的解决方案吗?我觉得这应该是人们常做的事情,但是网上没有找到太多讨论。

谢谢!!

【问题讨论】:

  • 你为什么不尝试在图像中找到你的屏幕,并找到轮廓?然后,您可以找到旋转和平移,因为您知道屏幕的实际大小,以及它在图像中出现的大小,并且您还知道屏幕在图像中的 .skewed 形状,与现实生活中的矩形形状相比。嗯....有趣的问题。 +1
  • 这是一个很好的问题,因为这不是典型的平面标记任务。 +1
  • @eboix,你有没有机会分享使用已知世界几何和倾斜图像几何来确定方向和位置的技术?我正在尝试做同样的事情,但是我使用的是已知尺寸的天花板灯,而不是电脑屏幕。

标签: opencv


【解决方案1】:

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

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

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

【讨论】:

  • 这里有一些幻灯片解释了粒子过滤器的类似应用。它匹配更通用的模板并且工作正常,因此对于您的应用程序而言,由于大小始终相同,性能会更好:slideshare.net/Javier_Barbadillo/…
  • 它不一定是相同的规模。例如,当相机从侧面“向下”看屏幕时,宽度将比相机直视时长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多