谢谢你点亮了我
今天我们部门总监,前期布置的一个图像识别工作,特别是代码这块不是很好找,就在“千钧一发”之际,我找到了“你的文章”,图像识别效果很好、你也“点亮了我”。
1 import cv2 2 import numpy as np 3 import pytesseract 4 5 image = cv2.imread('biaoge.jpg', 1) 6 #灰度图片 7 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 8 #二值化 9 binary = cv2.adaptiveThreshold(~gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, -5) 10 #ret,binary = cv2.threshold(~gray, 127, 255, cv2.THRESH_BINARY) 11 cv2.imshow("二值化图片:", binary) #展示图片 12 cv2.waitKey(0) 13 14 rows,cols=binary.shape 15 scale = 10 16 #识别横线 17 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1)) 18 eroded = cv2.erode(binary,kernel,iterations = 1) 19 #cv2.imshow("Eroded Image",eroded) 20 dilatedcol = cv2.dilate(eroded,kernel,iterations = 1) 21 cv2.imshow("表格横线展示:",dilatedcol) 22 cv2.waitKey(0) 23 24 #识别竖线 25 scale = 20 26 kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale)) 27 eroded = cv2.erode(binary,kernel,iterations = 1) 28 dilatedrow = cv2.dilate(eroded,kernel,iterations = 1) 29 cv2.imshow("表格竖线展示:",dilatedrow) 30 cv2.waitKey(0) 31 32 #标识交点 33 #cv2.addWeight(img1, 0.5, img2, 0.5,0) 34 bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow) 35 cv2.imshow("表格交点展示:",bitwiseAnd) 36 cv2.waitKey(0) 37 # cv2.imwrite("my.png",bitwiseAnd) #将二值像素点生成图片保存 38 39 #标识表格 40 merge = cv2.add(dilatedcol,dilatedrow) 41 cv2.imshow("表格整体展示:",merge) 42 cv2.waitKey(0) 43 44 45 #两张图片进行减法运算,去掉表格框线 46 merge2 = cv2.subtract(binary,merge) 47 cv2.imshow("图片去掉表格框线展示:",merge2) 48 cv2.waitKey(0) 49 50 #识别黑白图中的白色交叉点,将横纵坐标取出 51 ys,xs = np.where(bitwiseAnd>0) 52 53 mylisty=[] #纵坐标 54 mylistx=[] #横坐标 55 56 #通过排序,获取跳变的x和y的值,说明是交点,否则交点会有好多像素值值相近,我只取相近值的最后一点 57 #这个10的跳变不是固定的,根据不同的图片会有微调,基本上为单元格表格的高度(y坐标跳变)和长度(x坐标跳变) 58 i = 0 59 myxs=np.sort(xs) 60 for i in range(len(myxs)-1): 61 if(myxs[i+1]-myxs[i]>10): 62 mylistx.append(myxs[i]) 63 i=i+1 64 mylistx.append(myxs[i]) #要将最后一个点加入 65 66 67 i = 0 68 myys=np.sort(ys) 69 #print(np.sort(ys)) 70 for i in range(len(myys)-1): 71 if(myys[i+1]-myys[i]>10): 72 mylisty.append(myys[i]) 73 i=i+1 74 mylisty.append(myys[i]) #要将最后一个点加入 75 76 print('mylisty',mylisty) 77 print('mylistx',mylistx) 78 79 80 #循环y坐标,x坐标分割表格 81 for i in range(len(mylisty)-1): 82 for j in range(len(mylistx)-1): 83 #在分割时,第一个参数为y坐标,第二个参数为x坐标 84 ROI = image[mylisty[i]+3:mylisty[i+1]-3,mylistx[j]:mylistx[j+1]-3] #减去3的原因是由于我缩小ROI范围 85 cv2.imshow("分割后子图片展示:",ROI) 86 cv2.waitKey(0) 87 88 #special_char_list = '`~!@#$%^&*()-_=+[]{}|\\;:‘’,。《》/?ˇ' 89 pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe' 90 text1 = pytesseract.image_to_string(ROI) #读取文字,此为默认英文 91 #text2 = ''.join([char for char in text2 if char not in special_char_list]) 92 print('识别分割子图片信息为:'+text1) 93 j=j+1 94 i=i+1
在今天特别的日子,特别的互相祝福吧
Thank for "TryTestwonderful"
,Best Wish 不负年华

浙公网安备 33010602011771号