gpt4 book ai didi

python - 如何使用直方图识别文本区域?

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:25 25 4
gpt4 key购买 nike

我有一个示例图片,如下所示:

可能有一条或多条水平线分隔文本部分。我希望获得 4 block 文本,如下所示:

水平线可能靠近文本,外部矩形并不总是存在。

我试过以下- 临界点- 侵 eclipse 和扩张- 查找轮廓

由于水平线靠近文本,因此没有干净的方法来侵 eclipse 和膨胀以获得水平线上方和下方的文本。有时有效,有时无效,这取决于线条与文本的接近程度。

我读到使用直方图可以识别水平线,并且始终一致地识别文本 block 。关于如何做到这一点的任何指示?

最佳答案

Detect hougLines -> Black Out the Lines -> Dialate 。

代码

import cv2
import numpy as np;

im = cv2.imread("im.png")

im_gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(im_gray,127,255,cv2.THRESH_BINARY_INV)

edges = cv2.Canny(im_gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 100
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for line in lines:
for x1,y1,x2,y2 in line:
cv2.line(thresh,(x1,y1),(x2,y2),(0),5)


kernel = np.ones((3,3),np.uint8)

thresh = cv2.dilate(thresh,kernel,iterations = 10)





_,contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
minArea=5000 #nothing
for cnt in contours:
area=cv2.contourArea(cnt)
if(area>minArea):
rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(im,[box],0,(0,0,255),2)

cv2.imshow("thresh", im)
cv2.imwrite('so_result.jpg',im)
cv2.waitKey(0)

输出

enter image description here

关于python - 如何使用直方图识别文本区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com