2010-06-30 145 views
1

如果我想检测透视失真对象(例如矩形)并计算校正转换,那么什么是一个好的方法?用OpenCv进行透视检测

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

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

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

回答

2

你必须精确地指定你的意思检测失真。我假设你想检测这种纸张(或你的桌子/平坦表面)的角落,并使其与显示器轴线平行。这可以使用cvFindHomographycvWarpPerspective完成。我已经为python写了一些示例代码,请注意,这些仍然是旧的绑定(尽管不应该花很长时间来更新到opencv 2.0):http://ioctl.eu/blog/2009/05/13/opencv_homography

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

UPDATE 这可能对你也很有趣:我刚刚听到的图像处理透视失真(例如增大该缩短)谈话。它们需要大量的用户交互,但是为了保持顺畅的翘曲而优化某些网格。 这里是acm链接:http://portal.acm.org/citation.cfm?id=1778765.1778864 也许你可以从那篇论文和提到的参考文献中得出一些想法,但是我自己还没有读过(还没有)。

+0

谢谢你的回答。我不想详细说明,因为我不想缩小自己的范围,但想从别人那里得到一些信息。检测拐角是我想到的一种方式,但我担心它不够健壮。例如,很多图片在图片的边界外有一个或多个角落。 – Krumelur 2010-07-01 07:42:59

+0

我认为zerm的答案涵盖了一个很好的起点,所以我不会提出另一个答案,但要扩大他的方法。 正确的做法(最自然的)是找到角落。要找到角落,您可以使用可用的角落探测器。但是,您也可以找到图像的消失点。 你的问题在这些纸张的形状是什么模糊。或者什么类型的背景或什么类型的颜色。这是一个计算机视觉问题,最好是张贴一些图像。 – 2010-07-07 02:58:46

+0

@Dat Chu:发布样本的好处。无论如何,这更像是一个“有趣的”练习,我需要一些初学者。我想我会去寻找消失点。实际上,文本可能比边缘本身更易察觉。 – Krumelur 2010-07-29 21:09:38