【发布时间】:2014-04-09 16:35:20
【问题描述】:
我是图像处理的新手,尤其是 opencv。
我正在从事一个需要识别数字的 OCR 项目。
这是我要处理的图像:
假设我已经优化了图像,我的问题是:
在图像中,数字总是出现多次,假设我找到了轮廓,那么我怎么知道哪一个是最好的处理?
我如何知道需要将每个轮廓旋转到什么角度才能使其变直?
【问题讨论】:
-
你是要投票,还是去看看还是什么?
我是图像处理的新手,尤其是 opencv。
我正在从事一个需要识别数字的 OCR 项目。
这是我要处理的图像:
假设我已经优化了图像,我的问题是:
在图像中,数字总是出现多次,假设我找到了轮廓,那么我怎么知道哪一个是最好的处理?
我如何知道需要将每个轮廓旋转到什么角度才能使其变直?
【问题讨论】:
在图像中,数字总是出现多次,假设我找到了轮廓,那么我怎么知道哪一个是最好的处理?
你总是想要最大的数字,因为它们最不被视角扭曲。所以你总是想要图像中间的数字,因为它们也在球的中间。
我如何知道我需要将每个轮廓旋转到什么角度才能使其变直?
看看rotated rect。我解释了如何找到角度in this thread。
由于您始终拥有一个完全居中的球,因此您应该考虑使用映射来“解开”您的球(因此可以将地球投影到地图上)。之后在平面图像上查找数字应该非常简单。
编辑:由于您只有 10 个数字,您还可以使用足够大的训练集“蛮力”解决方案。因此,只需将您检测到的所有数字都放入分类器并保留最可能的解决方案。
【讨论】:
1) 我在第一部分同意@Sebastian。利用在您的场景中数字放置在球表面的事实,因此首先选择中心感兴趣区域内的斑点。
2)图像中显示的轮廓没有旋转(数字是)。我宁愿将它们与旋转不变的关键点结合使用,而不是“旋转”这些边界框,这似乎很令人头疼。我会澄清这一点:
a) 您知道您的号码在哪里,因此您不必搜索整个图像。好的,记住这些已经选择的区域。
b) 您可以对数字 0-9 进行“直接”采样,并将它们用作基本事实。
c) 您可以在每个“ground truth”图像和每个候选区域之间执行匹配搜索。现在,忘记缩放/旋转:使用缩放/旋转不变的关键点!像这样的东西: 同样,请注意您已经选择了感兴趣的区域,因此在您的情况下,搜索将包括检查每个注册号码与您的候选人之间的匹配数(蓝线数)。我觉得值得一试! :)
您可以在 opencv here. 中找到有关不同关键点的更多信息
希望对你有帮助!
【讨论】: