python验证码识别问题,二值化的值如何设置?

我想识别几个验证码,但是按照目前网上找到的答案识别之后,都不太理想。
二值化之后,通过百度的图片识别接口还是无法识别验证码。
请教各位大神,二值化该如何操作。

图片描述

图片描述

from PIL import Image
img = Image.open('c.png') # 读入图片
img = img.convert("RGBA")
pixdata = img.load()
#二值化
for y in range(img.size[1]):
    for x in range(img.size[0]):
        if pixdata[x, y][0] < 90:
            pixdata[x, y] = (0, 0, 0, 255)
for y in range(img.size[1]):
    for x in range(img.size[0]):
        if pixdata[x, y][3] < 136:
            pixdata[x, y] = (0, 0, 0, 255)
for y in range(img.size[1]):
    for x in range(img.size[0]):
        if pixdata[x, y][4] > 0:
            pixdata[x, y] = (255, 255, 255, 255)
img.save("input-black.png", "png")

二值化之后的图片
图片描述

图片描述

阅读 3.1k
4 个回答

你好,我不是很懂这类问题。但是我看你的描述和截图,觉得二值化的值,不一定是一组,比如现在的黑白对"C"就识别不出来, 你可以选用几套值,然后取概率最大的估计会提高成功率。

二值化, 然后用模板进行匹配是最初级得操作。二值化得值,你需要根据图片得实际情况去调整。像你这种验证码, 你可以尝试先查找当前图片颜色最多颜色范围,这样可以过滤掉背景。过滤掉背景然后就可以直接把图片二值化为黑白进行后续处理

先去背景色是第一步

利用Tesseract训练,不是特别复杂的验证码识别率可以达到99%,参考:

https://www.thinksaas.cn/group/topic/583915/
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题