from PIL import Image
import pytesseract
class Verification():
def __init__(self,path):
self.image = Image.open(path)
self.w, self.h = self.image.size
self.num = 0
def my_grayscale(self): # 自定义灰度化
for i in range(self.w):
for j in range(self.h):
R,G,B = self.image.getpixel((i,j))
pixel = int(R*0.3+G*0.59+B*0.11)
self.image.putpixel((i,j),(pixel,pixel,pixel))
print('自定义灰度化完成')
self.saveimage()
def grayscale(self): # 库方法灰度化
self.image = self.image.convert('L')
print('灰度化完成')
self.saveimage()
def sharp(self): # 二值化
tem = 0
for i in range(self.w):
for j in range(self.h):
tem += self.image.getpixel((i,j))[0]
pixel_ave = tem/self.w/self.h
for i in range(self.w):
for j in range(self.h):
p = self.image.getpixel((i,j))[0]
if p > pixel_ave:
self.image.putpixel((i,j),(255,255,255))
else:
self.image.putpixel((i,j),(0,0,0))
print("二值化完成")
self.saveimage()
def reduction_noise(self): # 降噪
RANGE = 4
K = 0.03
def function(x,y): # 生成附近点的坐标
for i in range(x-RANGE,x+RANGE+1):
for j in range(y-RANGE,y+RANGE+1):
lib = [i,j]
yield tuple(lib)
for i in range(self.w):
for j in range(self.h):
if i<self.w*K or i>self.w*(1-K) or j<self.h*K or j>self.h*(1-K):
self.image.putpixel((i,j),(255,255,255))
continue
num = 0
if self.image.getpixel((i,j))[0]==0:
for x in function(i,j):
if self.image.getpixel(x)[0]<128:
num += 1
if num<0.4*((RANGE*2+1)**2-1):
self.image.putpixel((i, j),(255,255,255))
print('降噪完成')
self.saveimage()
def saveimage(self): # 存图片
self.num += 1
self.image.save(f'{self.num}.jpg')
print('图片已储存')
def img_to_str(self): # 识别转换
string = pytesseract.image_to_string(self.image)
print(string)
return string
def run(self):
self.my_grayscale()
# self.grayscale()
self.sharp()
self.reduction_noise()
self.img_to_str()
if __name__ == "__main__":
path = r'D:\qq聊天记录\480299053\FileRecv\1.jpg'
im = Verification(path)
im.run()
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交