首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在OpenCV中查找包含文本行的等高线

在OpenCV中查找包含文本行的等高线
EN

Stack Overflow用户
提问于 2018-06-10 03:18:31
回答 1查看 6.8K关注 0票数 8

我正在写一个文本识别程序,我在排序等值线时遇到了问题。程序对于一行文本工作得很好,但是当涉及到整个文本块时,我的程序在80%的时间内不能检测到文本行。什么是真正有效的方法来提取一行文本,然后提取所有其他行(一次提取一行)?

我想要实现的目标:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 03:47:59

要实现这一点,需要执行一系列步骤:

  1. 找到对图像进行二值化的最佳阈值。我使用了Otsu threshold.
  2. Find,这是一种合适的形态学操作,它将沿着水平方向形成一个单独的区域。选择宽度大于高度的核。
  3. 在生成的等值线

上绘制边界框

更新

具体实现如下:

代码语言:javascript
复制
x = 'C:/Users/Desktop/text.jpg' 

img = cv2.imread(x)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  

#--- performing Otsu threshold ---
ret,thresh1 = cv2.threshold(gray, 0, 255,cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)
cv2.imshow('thresh1', thresh1)

代码语言:javascript
复制
#--- choosing the right kernel
#--- kernel size of 3 rows (to join dots above letters 'i' and 'j')
#--- and 10 columns to join neighboring letters in words and neighboring words
rect_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (15, 3))
dilation = cv2.dilate(thresh1, rect_kernel, iterations = 1)
cv2.imshow('dilation', dilation)

代码语言:javascript
复制
#---Finding contours ---
_, contours, hierarchy = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

im2 = img.copy()
for cnt in contours:
        x, y, w, h = cv2.boundingRect(cnt)
        cv2.rectangle(im2, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('final', im2)

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档