图像中的矩形检测

Posted

技术标签:

【中文标题】图像中的矩形检测【英文标题】:Rectangle detection in image 【发布时间】:2014-04-30 06:24:14 【问题描述】:

我想对一张矩形纸的检测进行编程,它的每一面都不需要完全笔直,因为我可以在“空中”拍摄一张照片,这意味着纸的单面纸张可能会有点变形。

CamScanner 应用程序(iosandroid)在这方面做得非常好,我想知道如何实现这一点。首先我想到的是:

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

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

以下是在 CamScanner 中拍摄的一些图像。 即使在 a) 侧面被扭曲(但角落仍然显示在叠加层中但并不真正适合白纸的角落)和 b) 背景非常接近实际纸张但这些都被很好地检测到它仍然被正确识别:

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

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

在这里它完全失败了:

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

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

【问题讨论】:

【参考方案1】:

OpenCV 框架可能会帮助您解决问题。另外,您可以查看this document 以获取Android 平台。

完整的源代码可在Github 获得。

【讨论】:

请避免使用类似Your answer is in another castle: When is an answer not an answer的答案 很好,不知道。我只是不确定这是否真的会检测到我上面图片中显示的“页面”,因为它们没有填充恒定的颜色......

以上是关于图像中的矩形检测的主要内容,如果未能解决你的问题,请参考以下文章

检测图像中的矩形并裁剪

如何在pygame中检测两个矩形对象或图像之间的碰撞

将检测到的矩形从纵向 CIImage 转换为横向 CIImage

使用opencv将旋转和倾斜的图像插入另一个图像中检测到的矩形?

我想要在opencv中用最小矩形外接图中图像并剪切截取出这个矩形部分。

检测图像中矩形的最简单*正确*方法是啥?