我已經做了大量的研究,並且找不到能夠實現我所需要的技術的組合。用opencv檢測W2中的單個盒子 - python
我有一種情況,需要在數百個W2上執行OCR以提取對帳數據。 W2s的質量很差,因爲它們被打印並隨後掃描回計算機。上述過程不在我的控制範圍之內;不幸的是,我必須與我所得到的一起工作。
去年我能夠成功地完成這個過程,但由於時效性是一個主要問題,我不得不對其進行強制執行。我通過手動指示座標來從中提取數據,然後僅在這些段上一次執行OCR。今年,我想提出一個更加動態的情況,預計座標可能發生變化,格式可能發生變化等。
我已經在下面包括了一個樣本,已擦洗的W2。這個想法是W2上的每個盒子都是它自己的矩形,並通過迭代所有矩形來提取數據。我已經嘗試了幾種邊緣檢測技術,但沒有一種能夠提供完全所需的。我相信我還沒有找到所需的預處理的正確組合。我試圖鏡像一些Sudoku拼圖檢測腳本。
下面是我迄今嘗試,用Python代碼,其可與OpenCV的2或3個可以使用是否沿結果:
import cv2
import numpy as np
img = cv2.imread(image_path_here)
newx,newy = img.shape[1]/2,img.shape[0]/2
img = cv2.resize(img,(newx,newy))
blur = cv2.GaussianBlur(img, (3,3),5)
ret,thresh1 = cv2.threshold(blur,225,255,cv2.THRESH_BINARY)
gray = cv2.cvtColor(thresh1,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,220,apertureSize = 3)
minLineLength = 20
maxLineGap = 50
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
cv2.line(img,(x1,y1),(x2,y2),(255,0,255),2)
cv2.imshow('hough',img)
cv2.waitKey(0)
的問題是,這與該參數的垂直線是幾乎未檢測到,試圖找到垂直線與'lines_v = cv2.HoughLinesP(邊緣,如圖1所示,np.pi,100,minLineLength,maxLineGap)'併爲此做出另一個循環。爲HoughLinesP函數嘗試不同的參數值,也許爲水平和垂直線設置不同的值。 – ebeneditos