2011-07-14 31 views
1

我的问题与this one类似,但在范围上更具体。在JPG图像中查找文本的边框

在我的纸牌游戏的应用程序,我想为用户能够点击位于扫描JPEG图像的话。请参阅此示例Pokemon trading card

在这种情况下,用户应该能够给他的鼠标移到文本“划痕”,在其上脉冲矩形边框周围会出现文字徘徊,表明它是点击。问题是如何检测文本的边框。将会有一系列已知BEFOREHAND的用户可以点击的单词(这些单词将从数据库中逐个检索)。为了继续我们的例子,这个例子中的数组将会是[“Scratch”,“Live Coal”]。一旦用户点击“Scratch”,应用程序必须通过回调知道选择了“Scratch”而不是“Live Coal”。

我正在考虑使用光学字符识别库来解决这个问题,但是开源选项质量差(例如GOCR)和/或在多个平台(例如Tesseract)上未经过良好测试。我只关心Windows和Mac的兼容性。我是否错过了一个不需要OCR的明显/更简单的解决方案/算法?我不能简单地手动编码每个卡的边界框,因为我的数据库中将有成千上万的扫描卡。用户也可以上传他自己的自定义卡片扫描和一系列可点击文本。

文字颜色不总是黑色。看到这个panorama将允许不同的卡和文本样式。黑卡有白色文字,倒数第三张卡(Zekrom)的黑色文字有白色轮廓。

赞赏任何编程语言的解决方案。不过,请注意,我正在寻找开源算法和/或库。如果在Ruby或Java中有解决方案,甚至更好,因为我的代码主要使用这两种语言。

编辑:我忘了提的单词的顺序/阵列中的短语将是相同的在卡上。因此,阵列将是[“划痕”,“活煤”]而不是[“活煤”,“划痕”]。我提到这一点是因为它可以简化任务。因此,对于这个例子,我可以简单地寻找黑色像素(尽管我必须留意白色圆圈中的黑色星星)。但是,在攻击名称下面有较小字体的描述性文本时(例如,请参阅全景图),会出现更多的困难情况。

+0

如果允许用户上传图片**和**随附的文字,你怎么在验证他们键入什么文本实际上匹配计划?此外,将卡的方向(如果一张卡横向显示,或在一些奇怪的角度会发生什么?)?你可能希望做的是清空现有的文本,然后*生成*文本 - 更容易生成边界框,更容易翻译(如有必要),没有(或很少,取决于)OCR。只有实际图像处理要做的是确定'移动'部分的边界框(您可能不想做,以预先限制OCR区域)。 –

+0

@ X-Zero谢谢,这听起来像是一个可行的解决方案。你会如何建议我检测'移动'部分的边界框? – Klarerwind

+0

取决于其他东西应该是可点击的,它基本上不是主图片 - 所有这些(似乎)都有一个相当明确的边界。卡的中点也有一个水平条,似乎有不错的对比度(对不起,我从来没有做过图像分析)。在任何情况下,如果用户可以上传(并假定制作)他们自己的卡片,那么您可能只想制作一个卡片创建者,他们可以在其中输入自己的文本,并包含某种自定义图片的小精灵;这应该更简单。目前,你必须认识到卡.. –

回答

1

我只想写一个程序,让您直观地绘制在你的文字简单边框,但可能可以做到这一点买像素颜色检测的差异。由于文本是黑色的,因此您可以看到最左上角的黑色像素没有大缩进并位于卡的下半部分内。

+0

这个问题是卡的格式差别很大。我还需要在这张[卡片](http://pokebeach.com/scans/team-rocket/39-dark-kadabra.jpg) – Klarerwind

0

当光标静止时,检查是否有任一下方或光标周围4个像素为黑像素。如果是,请检查前三个连续(因为字母之间可能还有一个非黑色像素)光标左侧的非黑色像素,右侧,顶部和底部。如果是,请使用这些位置绘制一个正方形。您可以使用OpenCV

+0

上认识“口袋妖怪力量:物质交换”和“心灵震动” ,但是应该围绕整个单词或短语绘制单个矩形边框。例如,在您链接到的OpenCV页面中,第一个图中的“将<...> \ OpenCV \ bin添加到系统PATH”周围有一个红色矩形。 – Klarerwind

+0

这个怎么样。预先在每个文本区域周围绘制透明矩形。因此,对于每个卡片对象,都有一个关联的矩形矩阵列表,其中包含矩形的坐标。现在,无论何时用户移动鼠标,都要检查用户是否在这些“隐藏”矩形之一内。如果他/她是,只需将该矩形的颜色改为黑色或其他东西? – TookTheRook

+0

如果您事先不知道这些卡片,只保存预先定义的字词的图像,例如“scratch”,并且当用户扫描一张新卡片时 - 检查卡片是否包含您存储的任何图像。如果是这样,你可以检测图像的位置并在其周围划一条线...... – TookTheRook