Opencv 图片的OCR识别的实战示例
一、图片变换
0、导入模块
导入相关函数,遇到报错的话,直接pipinstall函数名。
importnumpyasnp importargparse importcv2
参数初始化
ap=argparse.ArgumentParser() ap.add_argument("-i","--image",required=True, help="Pathtotheimagetobescanned") args=vars(ap.parse_args())
Parameters:
--imageimages\page.jpg
1、重写resize函数
defresize(image,width=None,height=None,inter=cv2.INTER_AREA): dim=None (h,w)=image.shape[:2] ifwidthisNoneandheightisNone: returnimage ifwidthisNone: r=height/float(h) dim=(int(w*r),height) else: r=width/float(w) dim=(width,int(h*r)) resized=cv2.resize(image,dim,interpolation=inter) returnresized
2、预处理
读取图片后进行重置大小,并计算缩放倍数;进行灰度化、高斯滤波以及Canny轮廓提取
image=cv2.imread(args["image"]) ratio=image.shape[0]/500.0 orig=image.copy() image=resize(orig,height=500) gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) gray=cv2.GaussianBlur(gray,(5,5),0) edged=cv2.Canny(gray,75,200)
3、边缘检测
检测轮廓并排序,遍历轮廓。
cnts=cv2.findContours(edged.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)[0]#轮廓检测 cnts=sorted(cnts,key=cv2.contourArea,reverse=True)[:5]#保留前5个轮廓 #遍历轮廓 forcincnts: #计算轮廓近似 peri=cv2.arcLength(c,True)#计算轮廓长度,C表示输入的点集,True表示轮廓是封闭的 #(C表示输入的点集,epslion判断点到相对应的linesegment的距离的阈值,曲线是否闭合的标志位) approx=cv2.approxPolyDP(c,0.02*peri,True) #4个点的时候就拿出来 iflen(approx)==4: screenCnt=approx break
4、透视变换
画出近似轮廓,透视变换,二值处理
cv2.drawContours(image,[screenCnt],-1,(0,255,0),2) warped=four_point_transform(orig,screenCnt.reshape(4,2)*ratio)#透视变换 #二值处理 warped=cv2.cvtColor(warped,cv2.COLOR_BGR2GRAY) ref=cv2.threshold(warped,100,255,cv2.THRESH_BINARY)[1] cv2.imwrite('scan.jpg',ref)
二、OCR识别
0、安装tesseract-ocr
链接:下载
在环境变量、系统变量的Path里面添加安装路径,例如:E:\ProgramFiles(x86)\Tesseract-OCR
tesseract-v#打开命令行,进行测试 tesseractXXX.pngresult#得到结果 pipinstallpytesseract#安装依赖包
打开python安装路径里面的python文件,例如C:\ProgramData\Anaconda3\Lib\site-packages\pytesseract\pytesseract.py
将tesseract_cmd修改为绝对路径即可,例如:tesseract_cmd=‘C:/ProgramFiles(x86)/Tesseract-OCR/tesseract.exe'
1、导入模块
fromPILimportImage importpytesseract importcv2 importos
2、预处理
读取图片、灰度化、滤波
image=cv2.imread('scan.jpg') gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) gray=cv2.medianBlur(gray,3)
3、输出结果
filename="{}.png".format(os.getpid()) cv2.imwrite(filename,gray) text=pytesseract.image_to_string(Image.open(filename)) print(text) os.remove(filename)
到此这篇关于Opencv图片的OCR识别的实战示例的文章就介绍到这了,更多相关Opencv图片的OCR识别内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。