我有一些内容可以使用OpenCV进行功能检测。在对内容本身应用检测之前,我需要检测透视变形的角度并进行修复。也许我可以使用QR码如何做到这一点的想法 - 为图像添加几个锚点。不会有任何方形内容,因此源图像可能如下所示:
3个方格将成为我们的主力。
使用OpenCV时,据我所知,我应该做这些操作:
cvtColor
函数将灰度方案应用于图像。blur
或GaussianBlur
threshold
和Canny
。findContours
并分析结果,通过检查顶点数或类似数来找到3个方格。perspectiveTransform
和warpPerspective
函数分析正方形位置,并将相应的变换应用于源图像。问题是我实际上并不了解应该使用哪些参数,以及步骤#5中方法调用的顺序是什么。 我是编码和数学的新手,所以我将不胜感激,谢谢!
答案 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