我有以下轮廓(最大的深蓝色多边形):
此照片由智能手机拍摄并由OpenCV处理。最后我想识别这张卡底部的数字(请忽略条形码)。
我的下一步是将此图片偏移3x3 transformation matrix
而不是3x3 transformation matrix
。预期结果的示例:
请注意,该示例缺少实际的图像数据。
问题:如何获取{{1}}?
我过去尝试过的事情:
我的意思相似:线段具有几乎相同的角度。
然而,这并没有给我准确的结果。我所希望的是一种近乎完美的算法,我可以用它进行文本识别。
我更喜欢包含某种过程语言或伪代码的答案。
答案 0 :(得分:1)
评论中的解决方案:计算单应矩阵。
答案 1 :(得分:0)
忘记一个矩形,然后优化你知道的模式 - 选择一个起始边缘(任何边缘),走向图像的中心,直到你碰到一条蓝线,然后走线找到两端的蓝线,x1,y1和x2,y2。你如何做到这完全取决于语言和表示,所以我提供的任何伪代码都可能是浪费时间。
使用这两点,计算旋转角度 - 你如何做到这将取决于你选择的边缘,但是,例如,对于顶线,你可以使用
angle = tangent( (y2 - y1) / (x2 - x1) )
使用直线形成三角形,水平线由上y坐标和由最右x坐标形成的垂直线组成。
这将为您提供所需的角度,因此在这种情况下您需要按-angle
旋转(您可以在一次操作中计算正确的角度,但如果您计算的话,它更容易可视化图像现在的角度。
由于您指定图像适合矩形,因此您根本不需要矩形的所有其他边,只需要一个。如果图像总是略微垂直(并且只是偏离正常的垂直轴),您可以选择边缘并始终使用它来查找边缘线。
如果图像可能旋转90度或更多,你可以选择两个相邻的边缘(例如顶部和左边),找到每条边上的蓝线的末端(它们应该大部分相交),并选择较长的这两个用于计算,因为较长的线将减少计算角度时的舍入误差。