2011-04-24 136 views
5

我在iPhone上使用OpenCV。我想在照片中找到数独。 我开始了一些高斯模糊,自适应阈值,反转图像和扩张。 然后我做了一些findContour并画出了曲线来隔离数独网格。 然后我使用霍夫变换来寻找线条,我现在需要做的是找到网格的角落。数独照片可能会以一个角度拍摄,所以我需要找到角落,以便我可以正确裁剪和扭曲图像。OpenCV检测角落

这是两张不同照片的外观。一个是非常简单,一个在一个角度:

概率Hough

http://img96.imageshack.us/i/skrmavbild20110424kl101.png/

http://img846.imageshack.us/i/skrmavbild20110424kl101.png/

(标准霍夫是在一个评论我不能发布两个以上的链路。)

那么,找到这些角落的最佳方法是什么?这两种转换中哪一种最容易使用?

问候 莱纳斯

+0

标准霍夫: http://img269.imageshack.us/i/skrmavbild20110424kl101.png/ HTTP://img808.imageshack。 us/i/skrmavbild20110424kl101.png/ – Linus 2011-04-24 08:29:07

回答

2

为什么不使用OpenCV的角点检测?看看cvCornerHarris()。

或者,看看cvGoodFeaturesToTrack()。这是瑞士军刀功能检测,可以配置使用哈里斯角检测器(等)。

+0

拐角探测器也会在单元格内的数字上找到拐角 – user502144 2011-04-25 00:17:14

+0

我用cvGoodFeaturesToTrack()代替。现在我有四个(有时会找到更多)角落的X和Y值。现在我需要弄清楚哪一点是topLeft,topRight等等。任何想法,我可以做到这一点?它似乎只是迭代所有点并检查值,但当图像不是直的时候我失败了......想法? – Linus 2011-04-28 14:01:10

+0

在您的OpenCV发行版中查看/samples/c/squares.c。这个例子提供了一个方形探测器,它应该是一个很好的开始。很可能你必须扩展它来检测在旋转下观察正方形时产生的平行四边形。 – Throwback1986 2011-04-28 16:59:02

1

我建议以下办法。首先,找到所有线的交点。将线条按角度划分为“水平”和“垂直”是有帮助的(即找到两条主要的线条方向)。然后找到获取点的凸包。现在你有边界和边界上的一些点。您可以通过分析凸包中相邻点之间的角度来删除后者。角落将具有约90度的角度和点的边界 - 约180度。