以编程方式读取地图



我正在尝试读取以编程为涂料中手绘的地图。地图看起来像这样:

https://i.stack.imgur.com/mxlxu.png

我需要知道地图的每个像素属于哪个区域以及它们的名字是什么。

我想到了以下内容,但是我想知道是否有一个更容易或更快的方法(原始地图很大):

  1. 检测区域:每个像素的洪水填充并保存区域。这与文本不匹配。
  2. 检测文本/"噪声":再次填充每个像素,但是这次使用先前检测到的邻居像素的区域作为边界。例如。在为" ABC"区域中的文本像素进行此操作时,不属于" ABC"区域的所有物品都会被淹没。然后丢弃区域上特定数字的区域,例如20个像素。这样做是为了匹配该地区完全包含的字母(与小区域)。
  3. 在图像文件中保存区域的像素(包括在 2 中检测到的像素),并将每个像素馈入Tesseract以获取该区域的名称。

我发现上述方法非常复杂,而且似乎很慢(尽管我还没有完全实施)。在丢失边框像素的情况下,它也不能很好地处理完全封闭的区域。有什么更简单/更好的解决方案吗?

如果您首先在每个像素上进行洪水填充,则可能还会在o,b,A中的字母中获得小区域。我想您可以尝试以下内容:

  1. 检测包含标签的区域并记住围绕矩形的坐标。
  2. 对于包含文本的每个区域,请使用Tesseract或类似地阅读标签并记住它。
  3. 卸下包含文本的矩形。之后,您可以尝试进行一些形态学操作,以尝试关闭未完全关闭的区域。从您找到文本获取区域的地方开始洪水填充。

这在理论上可能起作用,但结果将取决于图像的外观,您检测到文本和类似的内容。

祝你好运!

最新更新