【问题标题】:Findcontours retrieve contours unsortedFindcontours 检索未排序的轮廓
【发布时间】:2012-06-21 15:43:27
【问题描述】:

我们正在使用 opencv for android 实现 OCR,一切都很顺利,直到使用 Imgproc.findcontours() 查找轮廓的部分它返回的轮廓与输入图像中的顺序不同 IE : 输入图像 M N O P 从 findcontours() 得到的第一个轮廓是 P 输入图像 E F G H 从 findcontours() 得到的第一个轮廓是 E(这里是对的) 输入图像 I J K L 从 findcontours() 得到的第一个轮廓是 J 所以它似乎随机提取轮廓我们如何解决这个问题?因为我们想把它写在图像中的字还给我们

【问题讨论】:

  • 我之前也感觉到了这个问题。现在我使用它们的质心对它们进行排序(当然,还有额外的工作要做)
  • 你使用了moments()吗?它可靠吗?这是否检索质心 m.get_mu02()?
  • 是的,我用时刻来获取质心。挺好的。
  • 哪个函数检索质心?当我输入 m。我有很多选择,没有文档告诉我哪一个给了我质心..提前谢谢

标签: opencv ocr


【解决方案1】:

OpenCV 在寻找轮廓时似乎没有任何顺序。如果我们需要对其进行排序,我们应该手动进行,这是一项额外的任务。

但是出于 OCR 的目的,我也遇到了这个问题。所以我所做的是找到检测到的轮廓的质心。可以用moments来找出来。

Finding centroid using Moments

或者你可以找到轮廓的边界框,然后找到那个边界框的中心。后来在 ocr 之后将数据放在同一个质心上。

这是我自己准备 OCR 时使用的方法。您可以在这个 SOF 问题中找到完整的详细信息:Simple Digit Recognition OCR in OpenCV-Python

编辑: FindContours 的顺序,(在 vasile 发表评论后)

原图:

找到轮廓的顺序:

【讨论】:

  • OpenCV findContours 在检索轮廓时实现了一个非常具体的算法顺序,只是顺序与您期望的不同:) 它从上到下和从左到右扫描图像。因此,比其他像素高一个像素的 J 将在 A 之前被提取,例如
  • 但我从右下角的感觉正好相反,因为我在所有情况下都是这样。也许我现在就上传它。
  • @vasile:哎呀,,,字体有点小,如果放大,就会混淆。但它是可读的,并且标记了一些乱序的。
  • 谢谢你们真的帮助了我,它已经在我的代码中完成了,现在我根据它的质心对轮廓进行排序..thanksss
  • “在 SOF 中表达感激的最佳方式是支持或接受答案” - 有人这么说。也许,你可以做到。
猜你喜欢
  • 2017-11-19
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多