【问题标题】:How to do a perspective transformation of an image which is missing corners using opencv java如何使用opencv java对缺少角的图像进行透视变换
【发布时间】:2020-06-29 09:11:56
【问题描述】:

我正在尝试使用 openCV 构建文档扫描仪。我正在尝试自动裁剪上传的图像。当文档超出框架(捕获的图像)时,我很少有边框有间隙的用例。

前图

下面是给定图像的canny边缘检测。

此处缺少边框,因此 findContours 不会返回正确的结果。 我该如何处理这样的图像。

自动精明边缘检测和扩张在这种情况下都不起作用,因为它只能连接小边缘。

还有一些文档可能只有 2 面或 3 面使用相机拍摄,我们如何裁剪不需要的其他区域。

示例图片:

是否有处理此类文档的特定技术? 请提出一些想法。

【问题讨论】:

  • 你能展示你的代码吗?
  • @xszym 你有机会看一下代码吗?
  • 希望我的回答对你有所帮助:)
  • 您可以尝试使用霍夫线变换检测线条边界。这不会给你角落,但会给你可以推断找到角落的线条。一旦你有了所有四个角的线,计算它们的交点。应该有 4 个十字路口,那些是你的角落。将此信息传递给透视整流器。

标签: opencv contour hough-transform canny-operator


【解决方案1】:

您的问题不寻常。我想到的解决这个问题的一种方法是:

  1. 在图像周围添加白色边框。 https://docs.opencv.org/3.4/dc/da3/tutorial_copyMakeBorder.html

  2. 在边缘寻找线

http://www.robindavid.fr/opencv-tutorial/chapter5-line-edge-and-contours-detection.html

https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_houghlines/py_houghlines.html

  1. 制作概率霍夫线

  2. 通过这些线裁剪图像。它肯定适用于像第一个这样的图像。 对于像第二张这样的图像,您可以使用垂直线和平行线。

当然,您的算法必须相当复杂才能正常工作。如果可能的话,最简单的方法是对整个文档进行拍照。

祝你好运!

【讨论】:

  • 感谢您的回复。我已经尝试过你提到的边框,它适用于第一张图片。问题是上传的图片可能具有文档的所有四个边缘,也可能没有。所以我必须以不同的方式处理所有的用例。我只是想知道是否有任何常见的技术来处理这个问题。
猜你喜欢
  • 2012-03-08
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2011-06-27
  • 2012-12-20
  • 1970-01-01
  • 2021-09-13
  • 1970-01-01
相关资源
最近更新 更多