Python使用Cv2模块识别验证码的操作方法
业里村牛欢喜 人气:0业务需求
识别验证码图片中的数字信息,用python的图形表示出来了
需求分析
使用Cv2模块、pytesseract模块进行操作。CV2是计算机建模识别的库,用来给图像进行灰度处理,降噪处理,形态学分析。pytesseract模块将智能识别图片字体数字,用于打印出来。
代码一
# -*- conding:utf-8 -*- #二维码识别,呈现不同效果。 #导入计算机学习开源数据库 import cv2 as cv #导入计算机识别模块 import pytesseract #导入图像模块,形成图像 from PIL import Image #定义函数,导入图像 def recognize_text(image): #边缘保留滤波,去除噪 dst = cv.pyrMeanShiftFiltering(image,sp=10,sr=150) #灰度图像 gray = cv.cvtColor(dst,cv.COLOR_BGR2GRAY) #图像二值化 ret,binary = cv.threshold(gray,0,225,cv.THRESH_BINARY_INV | cv.THRESH_OTSU) #形态学操作 ,腐蚀,膨胀 erode = cv.erode(binary,None,iterations=2) dilate = cv.dilate(erode,None,iterations=1) #逻辑运算,背景设置为白色,字体为黑色,便于识别 cv.imshow('dilate',dilate) cv.bitwise_not(dilate,dilate) cv.imshow('binary-image',dilate) #识别图像 test_message = Image.fromarray(dilate) text = pytesseract.image_to_string(test_message) print(f'define result:{text}') #导入图像 src = cv.imread(r'./image.png') #显示图像名字为input image,第二个是导入的图像。 cv.imshow('input image',src) #调取函数导入图像 recognize_text(src) cv.waitKey(0) cv.destroyWindow()
结果分析
导入的原图image的图片情况:
编译结果呈现:
代码二
验证码图片Image5.png:
代码模块
import cv2 as cv import pytesseract from PIL import Image def recognize_text(image): # 边缘保留滤波 去噪 blur = cv.pyrMeanShiftFiltering(image, sp=8, sr=60) cv.imshow('dst', blur) # 灰度图像 gray = cv.cvtColor(blur, cv.COLOR_BGR2GRAY) # 二值化 ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU) print(f'二值化自适应阈值:{ret}') cv.imshow('binary', binary) # 形态学操作 获取结构元素 开操作 kernel = cv.getStructuringElement(cv.MORPH_RECT, (3, 2)) bin1 = cv.morphologyEx(binary, cv.MORPH_OPEN, kernel) cv.imshow('bin1', bin1) kernel = cv.getStructuringElement(cv.MORPH_OPEN, (2, 3)) bin2 = cv.morphologyEx(bin1, cv.MORPH_OPEN, kernel) cv.imshow('bin2', bin2) # 逻辑运算 让背景为白色 字体为黑 便于识别 cv.bitwise_not(bin2, bin2) cv.imshow('binary-image', bin2) # 识别 test_message = Image.fromarray(bin2) text = pytesseract.image_to_string(test_message) print(f'识别结果:{text}') src = cv.imread(r'./image5.png') cv.imshow('input image', src) recognize_text(src) cv.waitKey(0) cv.destroyAllWindows()
结果呈现
总结经验
cv2,pytesseract的使用不复杂了,按照官方操作手册来使用即可。安装时候记得更换一下源的地址,有一些官方的源不容易搜索到CV2和pytesseract模块了,要更换地址源才可以用。不过代码模块只能识别图片中的数字,对图片中的中文还没有识别出来。可能需要重新写代码。
参考文献
使用Python中的pytesseract模块实现抓取图片中文字
Py之cv2:cv2(OpenCV,opencv-python)库的简介、安装、使用方法(常见函数、图像基本运算等)最强详细攻略
加载全部内容