想象一下,有一台相机在看你的电脑屏幕。我要做的是确定相机旋转了多少,距离屏幕有多远,以及它相对于屏幕中心的位置。简而言之就是旋转和平移矩阵。
我正在使用opencv执行此操作,并按照他们的相机校准示例使用棋盘图案和来自网络摄像头的框架执行此任务。我想处理任何通用图像,即屏幕截图和网络摄像头的帧。
我尝试使用特征检测算法从两个图像中获取关键点列表,然后将这些关键点与BFMatcher匹配,但遇到了问题。特别是SIFT不能正确匹配关键点,并且SURF在缩放图像上没有正确找到关键点。
这个问题是否有更简单的解决方案?我觉得这是人们常做的事情,但在网上没有找到太多讨论。
谢谢!
答案 0 :(得分:3)
查找自然平面标记是计算机视觉中的常见任务,但在您的情况下,您的屏幕会根据您在屏幕上可视化的内容而变化,它可以是您的桌面,浏览器,电影...... / p>
因此,您无法应用常用的标记检测方法,您应该尝试形状识别。一个想法是在屏幕框架的相同尺寸(通过不同比例)的矩形模板上尝试粒子滤镜,应用第一个边缘检测。
粒子滤镜将模板适合框架区域。完成此操作后,您将知道该位置。对于方向,您需要计算单应性,并且在“标记”中需要4个点,因此您可以应用直接线性变换(cv :: findHomography()为您执行此操作)。所以你的四个角可以是四个角。 这只是一个想法,祝你好运!