Java 图像处理-OpenCV,识别数字

Java 图像处理-OpenCV,识别数字,java,c++,image,opencv,Java,C++,Image,Opencv,我对图像处理,尤其是opencv是新手 我正在从事一个OCR项目,在这个项目中我需要识别数字 这是我要处理的图像: 假设我已经优化了图像,我的问题是: 在图像中,数字总是被重复了好几次,比如说我发现了轮廓,那么我如何知道哪一个是最好处理的呢 我怎样才能知道旋转每个轮廓时需要以什么角度使其笔直 在图像中,数字总是被重复了好几次,比如说我发现了轮廓,那么我如何知道哪一个是最好处理的呢 你想要的总是最大的数字,因为它们被透视图扭曲得最少。所以你总是想要在图像中间的数字,因为它们也在球的中间。 我怎样

我对图像处理,尤其是opencv是新手

我正在从事一个OCR项目,在这个项目中我需要识别数字

这是我要处理的图像:

假设我已经优化了图像,我的问题是:

  • 在图像中,数字总是被重复了好几次,比如说我发现了轮廓,那么我如何知道哪一个是最好处理的呢

  • 我怎样才能知道旋转每个轮廓时需要以什么角度使其笔直

  • 在图像中,数字总是被重复了好几次,比如说我发现了轮廓,那么我如何知道哪一个是最好处理的呢

    你想要的总是最大的数字,因为它们被透视图扭曲得最少。所以你总是想要在图像中间的数字,因为它们也在球的中间。

    我怎样才能知道旋转每个轮廓时需要以什么角度使其笔直

    看一看。我解释了如何找到角度

    因为你总是有一个完全居中的球,你应该考虑使用贴图来“取消”你的球(像从地球投影到地图上一样)。在平面图上找到数字应该很简单

    编辑:因为你只有10个数字,你也可以用足够大的训练集“暴力”解决方案。因此,只需将检测到的所有数字放入分类器,并保留最可能的解决方案。

    1)我同意@Sebastian在第一部分中的观点。利用以下事实:在您的场景中,数字放置在球的表面,因此首先选择感兴趣的中心区域内的水滴

    2) 图像中显示的轮廓未旋转(数字为)。与其“旋转”这些边界框(这似乎是一个相当头痛的问题),我宁愿将它们与旋转不变的关键点结合使用。我将澄清这一点:

    a) 你知道你的号码在哪里,所以你不必在整个图像中搜索。好的,记住这些已经选定的区域

    b) 你可以对数字0-9进行“直接”抽样,并将其用作基本事实

    c) 您可以在每个“地面真相”图像和每个候选区域之间执行匹配搜索。现在,忘记缩放/旋转:使用缩放/旋转不变关键点!大概是这样的: 再次注意,您已经选择了感兴趣的区域,因此在您的情况下,搜索将包括检查每个注册号码与您的候选人之间的匹配数(蓝线数)。我觉得值得一试!:)

    您可以在opencv中找到有关不同关键点的更多信息


    希望能有帮助

    为了我的英语,我还没有足够的咖啡。我希望你能理解我想说的。你是要投票给一个答案,还是去看看?我们只需要相互投票就可以获得工作奖励;)