kar*_*lip 12 c c++ opencv image-processing rotation
场景是这样的:我有一张纸的图片,我想做一些OCR.因此,请将下面的图片作为我的输入示例:

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

在这种情况下,要点是:[1215,43],[52,67],[56,869]和[1216,884]
此时,我需要调整这些点,使它们水平对齐.那是什么意思?如果您注意到上面子图像的区域,则会稍微旋转:图像右侧的点位置略高于另一侧的点.
换句话说,我们有图像A,它被夸大了,看起来比现实更加扭曲/旋转,然后是图像B - 这就是我想要的最终结果:
一个)
B) 
我不确定可以使用哪种技术来实现这种转换.应用程序还需要自动检测需要完成多少旋转,因为我无法控制图像采集过程.
目的是Mat使用标准化的子图像获得新的.我现在并不担心可能的图像失真,我只是想找到一种方法来确定需要对子图像进行多少旋转以及如何应用它并获得更矩形的区域.
我认为http://felix.abecassis.me/2011/10/opencv-rotation-deskewing/和http://felix.abecassis.me/2011/10/opencv-bounding-box-skew-angle/将会出现便利.上述帖子不包括透视变形(仅旋转).为了获得最佳效果,您必须使用warpPerspective(可能与之配合使用getRotationMatrix2D).使用线段之间的角度来找出扭曲透视所需的量.这里的假设是它们应该总是90度,并且就透视而言,最接近90度的是最接近的矢量.
不要忘记将你的载体标准化!