【问题标题】:How do I recognize a rotated digit in an image using OpenCV 3 and Tesseract/Template Matching?如何使用 OpenCV 3 和 Tesseract/模板匹配识别图像中的旋转数字?
【发布时间】:2019-10-11 01:38:37
【问题描述】:
这是我的问题。我有一些简单的图像,其中绿色圆圈内有一些黑色的大数字。问题是它们可以随机旋转。到目前为止,我设法做的是识别绿色圆圈,然后将它们从图像中剪掉,这样我就只剩下数字了。
为了把它们拉直,我想用以下方式构造一个旋转的边界矩形:
- 首先我找到带有
cv::findContours的数字的所有轮廓
- 然后对于每个数字轮廓,我通过函数
cv::minAreaRect 构造包含数字的最佳拟合旋转矩形
一切正常,除了数字4,其旋转的矩形与数字不对齐而是略微倾斜,如下图所示:
我也尝试使用拟合椭圆,但它也倾斜了。我能想到的唯一解决方案是使用模板匹配,提供本身也旋转的模板。
【问题讨论】:
标签:
c++
opencv
ocr
tesseract
【解决方案1】:
如果数字的字体是一致的,并且如果您可以隔离圆圈,并且如果它们是(或可以做成)统一大小,那么您可以完全绕过 Tesseract,但代价是构建各种旋转中所有数字的模板。
假设应用模板在 +/- 2° 范围内会产生良好的信号,即 (360/5)*10 = 720 个模板覆盖 0-9。将应用这些模板的成本与 Tesseract 调用的成本进行基准比较会很有趣。