仿射变换,简单旋转和缩放或其他完全?

场景是这样的:我有一张纸的图片,我想做一些OCR。 因此,请将下面的图片作为我的输入示例:

orig_image

在成功检测到与纸张对应的区域后,我留下了一个4个坐标的vector ,用于定义图像内部的位置。 请注意,由于摄像机的距离和拍摄照片时的角度,这些坐标可能与完美的矩形不对应。 出于查看目的,我连接了子图像中的点,以便您可以看到我的意思:

detected_image

在这种情况下,要点是:[1215,43],[52,67],[56,869]和[1216,884]

此时,我需要调整这些点,使它们水平对齐。 那是什么意思? 如果您注意到上面子图像的区域,则会稍微旋转:图像右侧的点位置略高于另一侧的点。

换句话说,我们有图像A ,它被夸大了,看起来比现实更加扭曲/旋转,然后是图像B – 这就是我想要的最终结果:

一个) bad_rect B) ok_rect

我不确定可以使用哪种技术来实现这种转换。 应用程序还需要自动检测需要完成多少旋转,因为我无法控制图像采集过程。

目的是使用带有规范化子图像的新Mat 。 我现在并不担心可能的图像失真,我只是想找到一种方法来确定需要对子图像进行多少旋转以及如何应用它并获得更矩形的区域

我认为http://felix.abecassis.me/2011/10/opencv-rotation-deskewing/和http://felix.abecassis.me/2011/10/opencv-bounding-box-skew-angle/将会出现便利。 上述post不包括透视翘曲(仅旋转)。 为了获得最佳结果,您必须使用warpPerspective (可能与getRotationMatrix2D一起使用)。 使用线段之间的角度来找出扭曲透视所需的量。 这里的假设是它们应该总是90度,并且就透视而言,最接近90度的是最接近的矢量。

不要忘记将你的载体标准化!

它被称为Keystone校正或梯形失真。 它将看起来像梯形的形状转换为矩形。

Book Scan Wizard程序提供了纠正此工件的技术,您可能需要将其检出。