验证码识别,基于开闭操作
(1)先要安装pytesseract工具
pip install pytesseract
遇到出错,参照一下解决
https://blog.csdn.net/weixin_41644725/article/details/95344924
(2)代码
#引入opencv模块
import cv2 as cv
#引入numpy模块
import numpy as np
#引入sys模块
import sys
from PIL import Image
import pytesseract as tess
#验证码测试
def ocr_test(img):
#(1)灰度化,阈值分割,黑色里面找白色!!!
img = cv.GaussianBlur(img,(7,7),0)
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_OTSU)
#ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY|cv.THRESH_TRIANGLE)
#binary = cv.adaptiveThreshold(gray,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,25,10)
print("threshold value: %s"%(ret)) #分割的阈值
cv.namedWindow("open_binary_image",cv.WINDOW_NORMAL)
cv.imshow("open_binary_image",binary)
#(2)选择核
'''
kernel = cv.getStructuringElement(cv.MORPH_RECT,(3,4))
binary = cv.morphologyEx(binary,cv.MORPH_OPEN,kernel)
cv.namedWindow("open_test",cv.WINDOW_NORMAL)
cv.imshow("open_test",binary)
'''
textImage = Image.fromarray(binary)
text = tess.image_to_string(textImage)
#print(text)
def img_test():
img = cv.imread('E:/chenopencvblogimg/yangzhengma1.png')
#判断是否读取成功
if img is None:
print("Could not read the image,may be path error")
return
cv.namedWindow("origin Pic",cv.WINDOW_NORMAL)
cv.imshow("origin Pic",img)
ocr_test(img)
#让显示等待键盘输入维持在那里,否则程序跑完就闪退啦!
cv.waitKey(0)
#销毁窗口
cv.destroyAllWindows()
if __name__ == '__main__':
sys.exit(img_test() or 0)