我每天拍摄我的汽车仪表板以记录工作里程。我使用 OpenCv 来检测数字显示里程的区域,裁剪到数字并匹配它们。我现在用来确定显示哪些数字的方法适用于(比如说)95% 的情况。查找数字工作正常(调整大小、旋转、正确透视)。匹配我觉得仍然有点棘手的数字。
我现在使用的方法是确定构成数字的每个部分/条纹的中心位置,并将中心的差异与预定义的值相匹配。为了找到中心,我使用开放 cv 的 blob 检测。
然后转换为二值图像
并且blob检测用于找到每个blob的中心(用红色标记)
将每个 blob 的中心位置与一组预定义位置的中心位置进行比较(平方距离)。最小二乘距离与数字的条纹有关。然后将找到的条纹组合与包含每个数字的条纹位置的字典进行比较。
我现在遇到的问题是,尽管图像已标准化,但有时会检测到更多的斑点,因为使二进制图像的阈值意外地在斑点的中心遗漏了像素。并且 blob 检测会看到它们是单独的 blob。
有没有更好的方法来确定它使用上面显示的数字的特定显示是什么数字?“更好”将是:更健壮、更简单、所需的逻辑/代码更少、更普遍适用。如果可能的话,我不想为此引入整个 OCR 库。