代码之家  ›  专栏  ›  技术社区  ›  tim

图像中的矩形检测

  •  10
  • tim  · 技术社区  · 10 年前

    我想编程检测一张长方形的纸张,这张纸的每一面都不需要完全笔直,因为我可能会在“空中”拍一张照片,这意味着纸张的单面可能会有点扭曲。

    应用程序(iOs和android)CamScanner做得非常好,我想知道这是如何实现的。首先我想到的是:

    • 平滑/降噪
    • 边缘检测(canny等)或阈值(全局/自适应)
    • 霍夫变换
    • 检测线(仅允许垂直/水平)
    • 计算4条找到的直线的截距点

    但这给我带来了很多不同类型图像的问题。 我想知道是否有一种更好的方法可以直接检测图像中的矩形形状,如果是的话,那么摄像头也可以这样实现!?

    以下是在CamScanner中拍摄的一些图像。 即使在a)侧边扭曲(但角仍然显示在覆盖层中,但并不真正适合白皮书的角)和b)背景非常接近实际纸张,但仍能正确识别,这些图像也能很好地检测到:

    a) b)

    它甚至可以正确获得旋转的图片:

    enter image description here

    当我插入一些测试错误时,它会失败,但至少会检测到一些轮廓,但始终尝试将其检测为矩形:

    enter image description here enter image description here

    在这里,它完全失败了:

    enter image description here

    我想在最后三个例子中,如果它进行hough变换,它至少可以检测到矩形的四条边中的两条。

    有什么想法和建议吗? 提前非常感谢

    1 回复  |  直到 10 年前
        1
  •  3
  •   Abdullah Elen    8 年前

    OpenCV 框架可以帮助您解决问题。此外,您可以查看 this document 对于 Android 站台

    Detecting simple shapes in an image

    完整的源代码位于 Github .