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

如何优化OpenCV与Pytesseract验证码识别代码?解决像素缺失识别问题

优化验证码OCR识别的图像预处理方案

问题背景

尝试通过图像预处理提升验证码OCR可读性,但因图像存在像素缺失问题,Pytesseract无法正确识别,当前识别结果为le eth g。

原始图像

原始验证码图像

阈值处理后图像

阈值处理后图像

闭运算处理后图像

闭运算处理后图像

原始代码

import cv2 as cv
import pytesseract
import numpy as np


img = cv.imread("image1.jpeg")
img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)

threshold = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 57, 13)

x = 255 - threshold

kernel = np.ones((3, 3),np.uint8)
closing = cv.morphologyEx(x, cv.MORPH_CLOSE, kernel)

captcha = pytesseract.image_to_string(closing, config="--psm 3")
print(captcha)

cv.imshow('close', closing)
cv.imshow('thresh', threshold)

cv.waitKey(0)
cv.destroyAllWindows()

优化方案

1. 调整自适应阈值参数

当前自适应阈值的块尺寸(57)过大,会丢失字符细节。缩小块尺寸并微调常数项,让阈值更贴合字符边缘:

# 修改阈值处理代码
threshold = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2)

2. 优化形态学操作

原3x3方形闭运算核不足以填补字符像素缺失,改用椭圆形核更贴合字符轮廓,同时增加迭代次数强化填补效果:

# 替换核定义与闭运算逻辑
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (2, 2))
closing = cv.morphologyEx(x, cv.MORPH_CLOSE, kernel, iterations=2)

3. 增加降噪预处理

原始图像存在细微噪点,在阈值处理前添加高斯模糊,减少噪点对阈值计算的干扰:

# 灰度化后新增高斯降噪
img = cv.GaussianBlur(img, (3, 3), 0)

4. 适配验证码场景调整Tesseract配置

使用--psm 8(将图像视为单个词)更适配验证码结构,同时指定字符白名单限制识别范围,避免无关字符干扰:

captcha = pytesseract.image_to_string(closing, config="--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")

完整优化代码

import cv2 as cv
import pytesseract
import numpy as np


img = cv.imread("image1.jpeg")
img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
# 新增高斯降噪
img = cv.GaussianBlur(img, (3, 3), 0)

# 调整阈值参数
threshold = cv.adaptiveThreshold(img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2)

x = 255 - threshold

# 使用椭圆形核并增加迭代次数
kernel = cv.getStructuringElement(cv.MORPH_ELLIPSE, (2, 2))
closing = cv.morphologyEx(x, cv.MORPH_CLOSE, kernel, iterations=2)

# 调整Tesseract配置
captcha = pytesseract.image_to_string(closing, config="--psm 8 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789")
print(captcha)

cv.imshow('close', closing)
cv.imshow('thresh', threshold)

cv.waitKey(0)
cv.destroyAllWindows()

内容的提问来源于stack exchange,提问作者Code.vc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:55:25