我正在Android平台上使用OpenCV。在这个社区和技术人员的巨大帮助下,我成功地从图像中检测到了一张纸。
以下是我所使用的步骤:
- Imgproc.cvtColor()
- Imgproc.Canny()
- Imgproc.GausianBlur()
- Imgproc.findContours()
- Imgproc.approxPolyDP()
- findLargestRectangle()
- 找到矩形的顶点
- 通过质心法按逆时针顺序找到矩形左上角的顶点
- 找到矩形的高度和宽度,以保持它的长宽比并进行warpPerspective变换。
应用所有这些步骤后,我可以轻松地从图像中获取文档或最大的矩形。但这高度取决于背景和文档纸之间强度的差异。由于Canny边缘检测器基于强度梯度原理工作,因此实现方面总是假定存在强度差异。这就是为什么Canny考虑了各种阈值参数的原因。
- 较低阈值
- 较高阈值
我的主要目的是使用Canny边缘检测进行文档扫描。那么如何动态计算这些阈值,以便可以处理暗色和亮色背景的两种情况?
我尝试了很多手动调整参数,但我找不到与场景相关的任何关系。