如何在图像中找到数字并读取它们?

2024-05-04 19:17:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这张照片:

Structure with painted number

这是我感兴趣的领域:

这是一个我想识别和“阅读”的数字

我不知道为什么我不能用pytesseract检测到它。 尽管我对其进行了预处理,并使该图像无噪声:

preprocessed and binary image

以下是我用来阅读它的配置:

  1. 只有数字

  2. 一个字符

    text = pytesseract.image_to_string(number_5,  lang='eng',config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')
    

尽管如此,我还是得到了\n\x0c作为答案

我想问一些关于如何识别具有唯一字符的图像(本例中只有数字)的提示

还有一个关于数字检测的问题。是否有一个模型可以搜索照片中的数字并返回它们所在位置的边界框


Tags: totext图像imagenumberlangstring数字
1条回答
网友
1楼 · 发布于 2024-05-04 19:17:07

检测图像中5的一种方法是掩蔽图像

您可以使用Thresholding Operations using inRange。首先,我们需要找到阈值的上限和下限值。经过几次试验后,我认为以下内容适合识别

msk = cv2.inRange(hsv, np.array([0, 0, 175]), np.array([179, 255, 255]))
  • 下限是np.array([0, 0, 175])
  • 上限为np.array([179, 255, 255])

结果将是:

enter image description here

在上面,我们可以清楚地看到数字5

现在我们可以应用以下processing方法

krn = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
dlt = cv2.dilate(msk, krn, iterations=1)
thr = 255 - cv2.bitwise_and(dlt, msk)

结果将是:

enter image description here

现在如果我们应用tesseract

d = pytesseract.image_to_string(thr, config=" psm 10")

会议将是:

5

代码:

import cv2
import numpy as np
import pytesseract

# Load the img
img = cv2.imread("MjfJF.png")

# Cvt to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Get binary-mask
msk = cv2.inRange(hsv, np.array([0, 0, 175]), np.array([179, 255, 255]))
krn = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 3))
dlt = cv2.dilate(msk, krn, iterations=1)
thr = 255 - cv2.bitwise_and(dlt, msk)

# OCR
d = pytesseract.image_to_string(thr, config=" psm 10")
print(d)

相关问题 更多 >