使用OpenCV检测透视角度并执行透视变换

时间:2016-07-24 10:00:20

标签: android c opencv computer-vision image-recognition

我有一些内容可以使用OpenCV进行功能检测。在对内容本身应用检测之前,我需要检测透视变形的角度并进行修复。也许我可以使用QR码如何做到这一点的想法 - 为图像添加几个锚点。不会有任何方形内容,因此源图像可能如下所示:

Source Image

3个方格将成为我们的主力。

使用OpenCV时,据我所知,我应该做这些操作:

  1. 使用cvtColor函数将灰度方案应用于图像。
  2. 使用blurGaussianBlur
  3. 应用模糊
  4. 应用thresholdCanny
  5. 使用findContours并分析结果,通过检查顶点数或类似数来找到3个方格。
  6. 应用perspectiveTransformwarpPerspective函数分析正方形位置,并将相应的变换应用于源图像。
  7. 问题是我实际上并不了解应该使用哪些参数,以及步骤#5中方法调用的顺序是什么。 我是编码和数学的新手,所以我将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

我假设您的主要问题是如何从三个二维对应中找到转换,并相应地扭曲图像。

请注意,3分仅定义仿射变换,而不是透视变换。 (如果您的视角很小,仿射变换非常好,例如,如果物体远离相机。)

2D仿射矩阵是3x3矩阵,其中最后一行是[0 0 1]。 (对于透视矩阵,零值可以是任意的。)

您可以通过求解一个线性系统来计算仿射变换,如答案https://stackoverflow.com/a/2756165/2079934中所述。 (解决方案是独一无二的。)

如果您有仿射矩阵,则可以应用warpAffine(而非warpPerspective)来纠正图像。 http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#warpaffine