我正在准备tesseract
到ocr
的图片。到目前为止我所做的是将我的图像转换为以下内容:
我基本上想要的是根据白色区域将图像切割成水平部分。所以这样:
我最关心的是左侧和中间的文字区域。
如果我只挑选左边区域的问题是我找不到一种方法来挑选中间的那些而不删除一些部分。
我面临的另一个问题是,如果我给tesseract
所有区域(我已经成功地已经提取了包含文本的每个区域),那就是它给了我垃圾,因为pic既有拉丁语也没有拉丁语。
另一个重要的事情是没有预定义的尺寸,所以假设这张照片中的尺寸是标准的是错误的。
概括说明:如何根据白色区域水平切割图像
答案 0 :(得分:2)
您可以使用参数来增加或减少行数。我跟着this guide
加载并反转图像:
import cv2
import numpy as np
img = cv2.imread('lic.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = 255 - img
获得优势:
edges = cv2.Canny(gray,50,150,apertureSize = 5)
minLineLength = 10
maxLineGap = 30
使用概率Hough变换查找线条:
lines = cv2.HoughLinesP(edges,.7,np.pi/180, 100,minLineLength,maxLineGap)
for line in lines:
for x1,y1,x2,y2 in line:
if x2-x1 == 0:
continue
检查斜率是否在-45度到45度之间(您可以根据需要进行调整):
dy = (y2 - y1)
dx = (x2 -x1)
if -1 < dy/dx < 1:
cv2.line(img,(x1 + dx*-100,y1 + dy*-100),(x2 + dx*100,y2 + dy*100),(0,255,0),2)
cv2.imshow("image: " + str(len(lines)) , img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('houghlines3.jpg',img)
产生了这张图片:
答案 1 :(得分:2)
我查看了文档,看看我是否可以使用任何东西。是的,我遇到了一个名为THIS PAGE轮廓的范围的有趣属性。
轮廓的范围定义为轮廓面积的面积与该轮廓的边界矩形的面积的比值。因此,该值越接近1,轮廓就越像矩形。
对于您提供的图像,它不会检测到看起来像阿拉伯语的单词。但如果在此之前进行了一些形态学操作,它就会起作用。
<强>代码:强>
path = 'C:/Users/Desktop/Stack/contour/'
im = cv2.imread(path + 'lic.png')
#--- resized because the image was to big ---
im = cv2.resize(im, (0, 0), fx = 0.5, fy = 0.5)
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret2, th2 = cv2.threshold(imgray, 0, 255,cv2.THRESH_BINARY + cv2.THRESH_OTSU)
im2 = im.copy()
_, contours, hierarchy = cv2.findContours(th2, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
count = 0
#--- It all begins here ---
for cnt in contours:
area = cv2.contourArea(cnt)
x, y, w, h = cv2.boundingRect(cnt)
rect_area = w * h
extent = float(area) / rect_area
if (extent > 0.5) and (area > 100): #--- there were some very small rectangular regions hence I used the area criterion ---
count+=1
cv2.drawContours(im2, [cnt], 0, (0, 255, 0), 2)
cv2.imshow(path + 'contoursdate.jpg', im2)
print('Number of possible words : {}'.format(count))
<强>结果:强>
在这种情况下,我刚刚绘制了轮廓。另一方面,您可以通过拟合边界矩形来裁剪这些区域,并将它们单独提供给OCR引擎。