【问题标题】:OpenCV Transform Shape with Arbitrary Contour into RectangleOpenCV 将任意轮廓的形状转换为矩形
【发布时间】:2015-09-09 14:34:02
【问题描述】:

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

注意事项:

  1. 形状轮廓不一定是直线 - 它们可以是 略微弯曲。
  2. 形状内的内容必须沿着 相应的 x 和 y 轴。

长篇大论:
在一张纸被折叠 2 或 4 次后,我正在尝试纠正图像的扭曲,该图像表示一张带有文本、徽标等的纸,并使其几乎是完美的矩形。

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

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

  1. 查找板材轮廓
  2. 计算校正矩阵以将形状区域映射到适当的矩形区域
  3. 使用计算矩阵变换图像

即类似于我们使用Imgproc.findContours 执行透视校正,然后找到纸张角,然后是Imgproc.getPerspectiveTransform 并最终使用Imgproc.warpPerspective 执行校正。

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

谁能指出如何在图像处理中实现它?

【问题讨论】:

标签: java android image opencv image-processing


【解决方案1】:

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

为了找到损坏的纸张的高度非线性几何形状,您可以拍摄页面的多张图像并对它们进行三角测量。如果您想走这条路,请阅读 Hartley 和 Zisserman 的《Multiple View Geometry》。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 2018-03-11
    • 2012-05-10
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多