日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)

發布時間:2023/12/14 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于python/opencv/tesseract使用傳統方法的,表格圖片版面分析以及印刷體漢字識別(持續更新,學習備份用)

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 #識別橫線 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)#識別豎線 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)#標識交點 bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow) #cv2.imshow("bitwiseAnd Image",bitwiseAnd) #cv2.waitKey(0) # cv2.imwrite("my.png",bitwiseAnd)#標識表格 merge = cv2.add(dilatedcol,dilatedrow) cv2.imshow("add Image",merge) cv2.waitKey(0)#識別黑白圖中的白色點 ys,xs = np.where(bitwiseAnd>0) mylisty=[] mylistx=[]#通過排序,獲取跳變的x和y的值,說明是交點,否則交點會有好多像素值,我只取最后一點 i = 0 #當兩點之間距離大于60時候視為跨越點,交點只留一個像素點 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)) #當兩點之間距離大于60時候視為跨越點,交點只留一個像素點 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') #讀取文字,此為默認英文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行有效數字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 """

總結

以上是生活随笔為你收集整理的基于python/opencv/tesseract使用传统方法的,表格图片版面分析以及印刷体汉字识别(持续更新,学习备份用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。