from PIL import Image
import math
import os
'''
要想破解二维码,假设二维码中的字符是红色的。首先是要把图像变成8位像素的。也就是P模式,
首先是把像素值占地最多的颜色找出来,需要用到histogram直方图
histogram里面存放的是每个颜色的像素值对应的个数,会受到图片模式的影响
图像如果是RGB模式,这模式是三通道,也就是像素值有768个,P模式是8bit表示一个像素,
能表示像素值是二的八次 256个,简便起见,变为P模式
'''
im=Image.open("./captcha.gif")
im.convert("P")
'''找出像素个数最大的前十个像素,写成字典的形式,用下标表示键,像素个数表示值
his=im.histogram()
values={}
for i in range(256):
values[i]=his[i]
for count,value in sorted(values.items(),key=lambda x:x[1],reverse=True)[:10]:
# print(count,value) #得出220和227是我们需要的验证码的红色
'''
'''创建一个空白图片,用来在里面画红色对应的像素点'''
im1=Image.new("P",im.size,255)
for x in range(im.size[0]):
for y in range(im.size[1]):
pim=im.getpixel((x,y))
if pim==220 or pim==227:
im1.putpixel((x,y),0)
# im1.show()
'''将图片分割成单个字符,分割的时候需要一个下令者和一个实施者来确定什么时候开始和结束
对图片纵向切割,将开始和结束的点放在列表里
'''
order=False
cutter=False
letters=[]
start=0
end=0
for x in range(im1.size[0]):
for y in range(im1.size[1]):
if im1.getpixel((x,y))!=255:#遇到黑色像素后,下令者命令切
order=True
if order==True and cutter==False:#下令者下令后,实施者就开始切,并记下现在的位置
cut
python 破解简单验证码
最新推荐文章于 2024-06-21 16:22:27 发布
本文介绍了使用Python进行简单验证码识别的过程,通过运行代码,成功识别出验证码中的字符,包括'7'、's'、'9'、't'、'9'和'j',准确率较高。
摘要由CSDN通过智能技术生成