我正在尝试以编程方式读取在 Paint 中手绘的 map 。 map 看起来像这样:
http://i.stack.imgur.com/mxlXU.png
我需要知道 map 的每个像素属于哪个区域以及它们的名称。
我想到了以下方法,但我想知道是否有更简单或更快(原始 map 很大)的方法:
- 检测区域:对每个像素进行洪水填充并保存区域。这与文本不匹配。
- 检测文本/“噪声”:再次对每个像素进行洪水填充,但这次使用先前检测到的相邻像素区域作为边界。例如。当对“Abc”区域中的文本像素执行此操作时,不属于“Abc”周围区域的所有内容都会被淹没。然后丢弃面积超过特定数字(例如 20 像素)的区域。这样做是为了匹配完全包含在该区域中的字母(面积较小)。
- 将区域的像素(包括在 2 中检测到的像素)保存在图像文件中,并将每个像素输入到 tesseract 中。获取区域的名称。
我发现上面的方法很复杂而且似乎很慢(虽然我还没有完全实现它)。它也不能很好地处理缺少边界像素的完全封闭区域。有没有更简单/更好的解决方案来做到这一点?
最佳答案
如果您首先对每个像素进行洪水填充,您可能还会在 O、B、A 等字母内得到小区域。我认为您可以尝试以下方法:
- 检测包含标签的区域并记住其周围矩形的坐标。
- 对于每个包含文本的区域,请使用 tesseract 或类似工具阅读标签并记住它。
- 删除包含文本的矩形。之后你可以尝试做一些形态学操作来尝试关闭没有完全关闭的区域。从您找到文本的位置开始填充以获取区域。
这在理论上可行,但结果将取决于图像的外观、文本检测的好坏等等。
祝你好运!
关于algorithm - 以编程方式读取 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288538/