【发布时间】:2018-02-21 18:11:42
【问题描述】:
我尝试了以下两种方法:-
图像到 Mat 的转换
应用高斯模糊
然后canny边缘检测
寻找轮廓
这个方法的问题是:
- 检测到的轮廓过多
- 大部分是开放的轮廓
- 没有检测到我想要检测的内容
然后我改变了方法,在高斯模糊/中值模糊之后尝试了自适应阈值处理,效果好得多,我能够在 50% 的情况下检测到角
我目前面临的问题是页面检测需要对比鲜明的背景,没有任何反射。我认为它对于现实世界的使用来说太理想化了。
这是我需要帮助的地方。甚至在解决方案的方向上也受到高度赞赏,尤其是在 java 中。感谢期待 在这样的对比鲜明的背景下工作得非常好
检测到 4 个角 这张照片很麻烦,因为背景并不是最对比鲜明的
找到初始最大轮廓
更新: 中值模糊没有太大帮助,所以我追查了原因,发现页面边界是零碎检测的,而不是单个轮廓,因此它检测到最大轮廓作为页面边界因此执行了一些形态学操作来关闭相对较小的间隙,由此产生的最大轮廓肯定得到了改善,但它不是最优的。有什么想法可以改善巨大的差距吗?
变形原图
在变形图像中找到的最大轮廓
在理想情况下对图像进行 PS 变形会导致检测到错误的轮廓边界。在变形图像之前可以检查的任何条件也是一个奖励。谢谢
【问题讨论】:
-
如果您的页面颜色一直是白色,那么您也可以尝试颜色分割。在这种情况下可以使用
inRange方法。 -
@ZdaR 不。颜色可能会有所不同,因为我还想扫描可能具有可变颜色背景的身份证
-
如果您的目标是扫描身份证,您可以尝试查找不是 4 个角,而是 BoundingRect - 它总是关闭的。比您可以按区域过滤已建立的 BoundingRects 并获得最大的。
-
@AndriiOmelchenko 主要功能是扫描文件(可能是身份证或任何页面)。如果方向是理想的,BoundingRect 就可以工作。它将提供模糊点。另外,它还取决于检测我卡住的最大轮廓,我总是以不连续的轮廓结束,而 BoundingRect 只会围绕一条线/轮廓绘制一个矩形
-
"如果方向理想,BoundingRect 可以工作。" - 似乎没有:BoundingRect 每次都能正常工作,不仅是为了理想的方向 - 它是旋转的矩形。
标签: android opencv image-processing edge-detection