python验证码的识别

920247e64660427e8b441d2b6851f1c6.gif

177f93e27317447d9e146846d5b05c2a.gif 

b5b87081d7904fa594e256e0155b69ba.gif 

8f0f959bb6af4c6288c9428bc2fccbc0.gif 

0ada11b175df4abca4c96fafa9744db7.gif 

 可以看到基本上是三种颜色,背景占比最多,其次就是验证码

我们可以把图片灰度化 去除最多的背景颜色 剩下最多的就是想得到的验证码了


灰度化

file = r"D:/photo/8.png"
image = Image.open(file)
img = image.convert('L')   # 灰度化


查找灰度图片最多的灰度

先将图片像素放入数组中

im2=[]

cols,rows = img.size # 图像大小

for x in range(0,rows):

    for y in range(0,cols):

        img_array = np.array(img)

        v = img_array[x,y] # 获取该点像素值

        im2.append(v)#加入数组

a=max(im2, key=im2.count)


完整代码

import pytesseract

from PIL import Image

import numpy as np

import cv2 as cv

import cv2

import pytesseract

file = r"D:/photo/8.png"

image = Image.open(file)

img = image.convert('L') # 灰度化

im2=[]

cols,rows = img.size 

for x in range(0,rows):

    for y in range(0,cols):

        img_array = np.array(img)

        v = img_array[x,y] # 获取该点像素值

        im2.append(v)#加入数组

 

while 0 in im2:

    im2.remove(0)#删除灰度0

 

a=max(im2, key=im2.count)#出现最多的数字 背景颜色

while a in im2:

    im2.remove(a)

print(im2)

a=max(im2, key=im2.count)

print(a)

table = []

for i in range(256):

    if i ==a:

        table.append(1)

    else:

        table.append(0)

photo = img.point(table, '1') #图片二值化

 

 

photo.save('02.jpg')

image = Image.open('02.jpg')

# 解析图片,lang='chi_sim'表示识别简体中文,默认为English

# 如果是只识别数字,可再加上参数config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789'

content = pytesseract.image_to_string(image,config='--psm 6 --oem 3 -c tessedit_char_whitelist=0123456789')

print(content)

 

小白第一次写 有更好的方法请大佬指教😳

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

智科顾某

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值