目录
字符验证码
导入 ;pip install pillow
导入:pip install Pytesseract
PIL库

常用阈值选择的方法是:
灰度平均值值法: 取
127
(
0~255
的中数, (
0+255
)
/2 = 127
)
平均值法:
计算像素点矩阵中的所有像素点的灰度值的平均值
avg
迭代法:
选择一个近似阈值作为估计值的初始值(比如全图像的平均灰度),
然后进行分割图像,产生两组像素,一组大于初始灰度值,另一组小于
初始灰度值,根据产生的子图像的特征来选取新的阈值,在利用新的阈
值分割图像,经过多次循环,使得错误分割的图像像素点降到最小。
Windows下安装
https://digi.bib.uni-mannheim.de/tesseract/可自行下载,点击下一步即可;
# -*- coding: utf-8 -*-
from PIL import Image
im = Image.open('1.png') #从文件中加载图像
img_gray = im.convert('L') # 对图片进行灰度化
# ig.save('2.png') 保存灰度化的
'''对图片进行2值化'''
def binarization(ig):
w, h = img_gray.size
tmp = 0
for i in range(w):
for j in range(h):
tmp += ig.getpixel((i, j))
avg_pixel = tmp / w / h
# 二值化处理
for i in range(w):
for j in range(h):
p = ig.getpixel((i, j))
if p > avg_pixel:
ig.putpixel((i, j), 255)
else:
ig.putpixel((i, j), 0)
return ig
# img_bz = binarization(img_gray)
# img_bz.save('3.png')
'''找到噪点范围'''
def point_list(i, j, prange):
for x in range(i-prange, i+prange):
for y in range(j - prange, j + prange):
if x ==i and y==j:
continue
yield (x,y)
'''传入需要降噪的二值化图片'''
def reduce_noise(ig):
w,h = ig.size
board_rate = 0.06
prange = 9 #可以改的范围自己调主要是看周围多少黑点
for i in range(w):
for j in range(h):
if i < w * board_rate or i > w * (1 - board_rate) or j < h * board_rate or j > h * (1 - board_rate):
ig.putpixel((i, j), 255)
continue
p = ig.getpixel((i, j))
if p < 100:
count = 0
for x, y in point_list(i, j, prange):
if ig.getpixel((x, y)) > 100:
count += 1
if count > 0.5 * ((prange * 2 + 1) ** 2 - 1):
ig.putpixel((i, j), 255)
return ig
# ig_nz = reduce_noise(img_bz)
# ig_nz.save('img_nz.png') #生成完整的图片方便识别
'''识别图片'''
import pytesseract
pytesseract.pytesseract.tesseract_cmd=r'J:\Tesseract\tesseract.exe'
zhi=pytesseract.image_to_string('img_nz.png')
p

该文介绍了使用Python进行字符验证码处理的步骤,包括灰度化、二值化和降噪,以及使用TesseractOCR引擎进行识别。此外,还讲解了如何通过超级鹰API进行点触验证的自动化处理,并提供了使用Selenium进行滑块验证的示例代码。
最低0.47元/天 解锁文章

568

被折叠的 条评论
为什么被折叠?



