【发布时间】:2020-07-26 16:50:30
【问题描述】:
我有兴趣检测线条(我设法使用霍夫变换弄清楚)及其上方的文本。
我写的代码如下。 (我已经编辑,以便我可以遍历每一行的坐标)
import cv2
import numpy as np
img=cv2.imread('test3.jpg')
#img=cv2.resize(img,(500,500))
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgEdges=cv2.Canny(imgGray,100,250)
imgLines= cv2.HoughLinesP(imgEdges,1,np.pi/180,230, minLineLength = 700, maxLineGap = 100)
imgLinesList= list(imgLines)
a,b,c=imgLines.shape
line_coords_list = []
for i in range(a):
line_coords_list.append([(int(imgLines[i][0][0]), int(imgLines[i][0][1])), (int(imgLines[i][0][2]), int(imgLines[i][0][3]))])
print(line_coords_list)#[[(85, 523), (964, 523)], [(85, 115), (964, 115)], [(85, 360), (964, 360)], [(85, 441), (964, 441)], [(85, 278), (964, 278)], [(85, 197), (964, 197)]]
roi= img[int(line_coords_list[0][0][1]): int(line_coords_list[0][1][1]), int(line_coords_list[0][0][0]) : int(line_coords_list[0][1][0])]
print(roi) # why does this print an empty list?
cv2.imshow('Roi NEW',roi)
现在我只是不知道如何检测这些线上方的感兴趣区域。是否可以说裁剪每一行并让图像说 roi_1 , roi_2 , roi_n ,其中每个 roi 是第一行上方的文本,第二行上方的文本等?
我希望输出是这样的。
【问题讨论】:
-
将形态学应用于阈值图像并获取轮廓。使用轮廓提取每一行文本。如果页面上的虚线仍有长线,则按宽度或高度过滤轮廓。例如,请参阅stackoverflow.com/questions/61198983/…
-
@fmw42 - 谢谢你,但是它检测到所有文本。我如何只检测上面的虚线?
-
舍弃第一行文本。
-
是的,我只需要行上方的文字吗?另外,我该如何按宽度或高度过滤轮廓?我知道如何找到轮廓和过滤长度
标签: python python-3.x opencv image-processing opencv3.0