基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)
生活随笔
收集整理的這篇文章主要介紹了
基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
基于python/opencv/tesseract使用傳統(tǒng)方法的,表格圖片版面分析以及印刷體漢字識(shí)別(持續(xù)更新,學(xué)習(xí)備份用)
import cv2 import numpy as np import pytesseractimage = cv2.imread('img-625101042_1.jpeg', 1) print(image.shape) #二值化 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5) #ret,binary = cv2.threshold(~gray, 127, 255, cv2.THRESH_BINARY) #cv2.imshow("cell", binary) #cv2.waitKey(0)rows,cols=binary.shape scale = 40 #識(shí)別橫線 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1)) eroded = cv2.erode(binary,kernel,iterations = 1) #cv2.imshow("Eroded Image",eroded) dilatedcol = cv2.dilate(eroded,kernel,iterations = 1) #cv2.imshow("Dilated Image",dilatedcol) #cv2.waitKey(0)#識(shí)別豎線 scale = 20 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale)) eroded = cv2.erode(binary,kernel,iterations = 1) dilatedrow = cv2.dilate(eroded,kernel,iterations = 1) # cv2.imshow("Dilated Image",dilatedrow) # cv2.waitKey(0)#標(biāo)識(shí)交點(diǎn) bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow) #cv2.imshow("bitwiseAnd Image",bitwiseAnd) #cv2.waitKey(0) # cv2.imwrite("my.png",bitwiseAnd)#標(biāo)識(shí)表格 merge = cv2.add(dilatedcol,dilatedrow) cv2.imshow("add Image",merge) cv2.waitKey(0)#識(shí)別黑白圖中的白色點(diǎn) ys,xs = np.where(bitwiseAnd>0) mylisty=[] mylistx=[]#通過排序,獲取跳變的x和y的值,說明是交點(diǎn),否則交點(diǎn)會(huì)有好多像素值,我只取最后一點(diǎn) i = 0 #當(dāng)兩點(diǎn)之間距離大于60時(shí)候視為跨越點(diǎn),交點(diǎn)只留一個(gè)像素點(diǎn) myxs=np.sort(xs) for i in range(len(myxs)-1):if(myxs[i+1]-myxs[i]>60):mylistx.append(myxs[i])i=i+1 mylistx.append(myxs[i]) # print(mylistx) # print(len(mylistx))i = 0 myys=np.sort(ys) #print(np.sort(ys)) #當(dāng)兩點(diǎn)之間距離大于60時(shí)候視為跨越點(diǎn),交點(diǎn)只留一個(gè)像素點(diǎn) for i in range(len(myys)-1):if(myys[i+1]-myys[i]>60):mylisty.append(myys[i])i=i+1 mylisty.append(myys[i]) # print(mylisty) # print(len(mylisty))i=0 contours,hierarchy = cv2.findContours(merge, cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) image2 = cv2.drawContours(image, contours, -1, (0,0, 255), 2) #print(len(contours)) #print(contours[0]) cv2.imshow("image2",image2) cv2.waitKey(0)br = [] for i in range(len(contours)):BR1= cv2.boundingRect(contours[i])br.append(BR1)#br = np.array(BR ).reshape()print(br)#print(x,y,w,h)#ROI = image[y:y + h, x:x + w]cv2.imshow("roi", ROI)cv2.waitKey(0)special_char_list = '`~!@#$%^&*()-_=+[]{}|\\;:‘’,。《》/?ˇ'pytesseract.pytesseract.tesseract_cmd = 'C://Program Files (x86)/Tesseract-OCR/tesseract.exe'text2 = pytesseract.image_to_string(ROI,'chi_sim') #讀取文字,此為默認(rèn)英文text2 = ''.join([char for char in text2 if char not in special_char_list])print(text2)#cv2.rectangle(image,ROI[i][0],ROI[i][1],(0,0,255),2)#print(ROI) """ for i in range(4): #只有4行有效數(shù)字ROI = image[mylisty[i]:mylisty[i+1]-3,mylistx[1]:mylistx[2]-3] #減去3的原因是由于我縮小ROI范圍cv2.imshow("add Image",ROI)cv2.waitKey(0)i=i+1 """總結(jié)
以上是生活随笔為你收集整理的基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MENTOR 安装过程
- 下一篇: 2048小游戏最佳算法C语言,2048游