具有任意轮廓的OpenCV变换形状为矩形

时间:2015-06-23 16:50:14

标签: java android image opencv image-processing

简短的问题是如何使用OpenCV将类似下面的形状转换为矩形?

enter image description here

备注:

  1. 形状轮廓不一定是直线 - 它们可能是 略微弯曲。
  2. 形状内的内容必须拉伸     因此,x轴和y轴都相同。
  3. 长篇故事
    在纸张折叠2到4次后,我试图纠正代表纸张的图像的扭曲,文本,徽标等,使其几乎完全呈矩形。

    输入图像已经是黑白格式,并具有更正的透视。所以一切都很好,除了它在扭曲的边缘周围有黑色区域,文字有点波浪。

    我的想法是序列应该是这样的:

    1. 查找工作表轮廓
    2. 计算校正矩阵以将形状区域映射到适当的矩形区域
    3. 使用计算矩阵
    4. 转换图像

      即。我们使用Imgproc.findContours进行透视校正,然后找到工作表角落,然后Imgproc.getPerspectiveTransform,最后使用Imgproc.warpPerspective进行校正。

      但我找不到适合这种情况的算法。

      有人能指出如何在图像处理中获得它吗?

1 个答案:

答案 0 :(得分:0)

在这种情况下,您正在寻找对该图像进行非线性转换的方法。传统上,您将使用整个纸张的单个转换将其制成矩形。这可以只在角落进行。更复杂的校正(例如镜头畸变),您需要在页面上选取点并断言它们应该共面才能生成转换矩阵。基本上,您需要了解图像中的几何形状才能使其变形。因此,您需要找到的几何是页面的3维表面。

为了找到整齐的纸的高度非线性几何形状,您可以拍摄页面的多个图像并对其进行三角测量。如果要走这条路,请选择Hartley和Zisserman的“多视图几何”副本。