使用OpenCv进行透视检测

时间:2010-06-30 15:54:44

标签: python opencv

如果我想检测透视失真的物体(例如矩形)并计算校正变换,那么什么是好方法?

例如,我有很多纸张躺在平面上的照片(照片是从一个角度拍摄的),我想纠正视角并裁剪它们。

我正在考虑使用OpenCv Python绑定来掀起一些东西。我认为这将是一个带有大量示例的“标准问题”,但我没有找到任何相关信息。线索?

编辑:我应该补充一点,我知道可以通过使用一些Web服务来完成,但我认为这是在学习OpenCv时做一些有用的事情的机会:)

1 个答案:

答案 0 :(得分:3)

您必须准确指定检测失真的含义。我假设您要检测此类纸张(或您的桌子/平面)的角落,并使其与显示器轴线平行。这可以使用cvFindHomographycvWarpPerspective来完成。我刚才为python编写了一些示例代码,请注意那些仍然是旧的绑定(不应该花很长时间来更新到opencv 2.0):http://ioctl.eu/blog/2009/05/13/opencv_homography

你显然要做的另一件事是检测角落。在我的示例代码中,用户需要使用鼠标单击四个角。在你的情况下,很难说,因为我需要一个例子。 OpenCV提供了几种检测角点的方法(参见Harris),在示例中还应该有关于如何查找矩形的代码。如果你可以更具体,我可能会更有帮助。

<强>更新 这对你来说也很有趣:我刚刚听过关于操纵图像中的透视失真的讨论(例如,增加透视)。它们需要大量的用户交互,但是通过一些约束来优化某些网格以保持平滑的翘曲。 这是acm链接:http://portal.acm.org/citation.cfm?id=1778765.1778864 也许你可以从那篇论文和所提到的参考文献中得出一些想法,但是我还没有自己读过它。