You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python提取图像中绿色字体的数字

问题原因

你现在写的代码第一步就把图像转成了灰度图,直接丢失了最核心的绿色字体颜色特征,三个数字全部混在灰度图里,OCR根本没法区分哪个是目标内容,自然识别结果不对。

正确实现逻辑

核心思路是先靠颜色特征把绿色数字单独抠出来,再做OCR识别,步骤如下:

  • 把读取到的BGR图像转成HSV颜色空间,这个颜色空间对特定颜色的筛选精度远高于原生BGR格式
  • 设定绿色对应的HSV阈值范围,生成掩码把非绿色的背景、其他颜色数字全部过滤成黑色,只保留绿色数字区域
  • 简单做个形态学操作去掉掩码里的噪点,再喂给Tesseract做识别,同时限定只识别数字,提升准确率
可直接运行的修正代码
import cv2
import numpy as np
import pytesseract

# 读取原图
img = cv2.imread("image.png")
# 转HSV空间做颜色筛选
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 绿色的HSV阈值范围,可根据实际图片的绿色深浅微调
lower_green = np.array([35, 40, 40])
upper_green = np.array([77, 255, 255])
# 生成绿色区域掩码
green_mask = cv2.inRange(hsv_img, lower_green, upper_green)

# 开运算去小噪点
kernel = np.ones((2, 2), np.uint8)
clean_mask = cv2.morphologyEx(green_mask, cv2.MORPH_OPEN, kernel)

# 识别时限定只识别数字,psm设为7适配单行数字场景
result = pytesseract.image_to_string(
    clean_mask,
    config="--oem 3 --psm 7 -c tessedit_char_whitelist=0123456789"
)
print(result.strip())
调参提示
  • 如果运行后没识别到数字,就把HSV的绿色范围稍微调宽一点,不同截图里的绿色受亮度、压缩影响会有偏差
  • 如果识别结果带多余杂项,就把形态学操作的核大小稍微调大一点,过滤残留的噪点

内容的提问来源于stack exchange,提问作者skyhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:09:16