【发布时间】:2018-06-06 14:47:45
【问题描述】:
我正在尝试提取放在拼字板上的瓷砖(字母)。目标是识别/阅读板上所有可能的单词。
理想情况下,我想找到拼字板的四个角,并应用透视变换,以进行进一步处理。
我使用的算法如下 -
找到结果图像的边界点(轮廓),然后应用Contour approximation得到角点,然后应用透视变换
这种方法适用于此类图像。但是,正如您所看到的,许多方板都有一个底座,该底座在顶部和底部都是弯曲的。有时,底座是一个大圆形板。有了这些图像,我的方法就失败了。示例图像和输出 -
圆形底座板:
使用上述方法找到的点:
我可以发布更多此类有问题的图片,但这张图片应该让您了解我正在处理的问题。我的问题是——
如果图像中还存在圆形板,我如何找到矩形板?
我想说的几点 -
我尝试使用霍夫线来检测图像中的线条,找到最大的垂直线,然后找到它们的交点来检测角点。不幸的是,由于瓷砖,所有线路似乎都被扭曲/断开,因此我的尝试失败了。
-
我还尝试将轮廓近似应用于图像中找到的所有轮廓(我假设大矩形也将是轮廓),但该方法也失败了。
我已经在 openCV-python 中实现了该解决方案。由于方法在这里很重要,而且问题变得有点太长了,所以我没有发布相关代码。
如果需要,我也愿意分享更多此类有问题的图像。 谢谢!
EDIT1 @Silencer 的回答对我识别图像中的字母很有帮助,但我想准确地找到图像中单词的位置。因此,我觉得识别行和列是必要的,并且只有在对板应用透视变换时才能做到这一点。
【问题讨论】:
-
你如何看待去除非线性轮廓?
-
@DmitriiZ。我可以使用什么技术来做到这一点?我希望有一些方法可以消除曲线。尝试使用腐蚀后膨胀,但它只是没有概括。必须有其他方法可以做到这一点。
-
首先想到的是做你现在正在做的任何事情,尝试近似它(cv2.approxPolyDP),看看它是否或多或少是矩形的。如果不是 - 删除轮廓。检测线是否为曲线也应该是可行的(mathworks.com/matlabcentral/answers/…)
-
我可以尝试检测曲线,但没有其他方法可以利用电路板的矩形来检测拐角吗?我只是想近似矩形的角点。
标签: python opencv image-processing computer-vision