您是否看到过HoughLinesP函数文档中的代码示例?
我认为您可以将其用作算法的起点。要拾取水平和垂直线,您只需要按线角过滤掉其他线即可。
更新:
如我所见,您无需查找线条,而是需要在页面上水平放置垂直边缘。对于此任务,您需要结合多个处理步骤才能获得良好的效果。
对于您的图像,通过将Canny边缘检测与HoughLinesP结合使用,可以获得很好的效果。这是我的代码(我使用过python,但我认为您已经明白了):
img = cv2.imread("C:/temp/1.png")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 80, 120)
lines = cv2.HoughLinesP(edges, 1, math.pi/2, 2, None, 30, 1);
for line in lines[0]:
pt1 = (line[0],line[1])
pt2 = (line[2],line[3])
cv2.line(img, pt1, pt2, (0,0,255), 3)
cv2.imwrite("C:/temp/2.png", img)
结果看起来像:
0
我正在尝试从来自“文档”的图像中查找水平和垂直线。这些文档是来自合同的扫描页面,因此这些行看起来就像您在表格或合同块中看到的一样。
我一直在尝试OpenCV来完成这项工作。 OpenCV中的Hough变换实现对于这项工作似乎很有用,但是我找不到任何可以使它清晰地找到垂直线和水平线的参数组合。我尝试了有无边缘检测。没运气。如果有人做了类似的事情,我会对如何做感兴趣。
在这里查看我在OpenCV中使用HoughP之前和之后的图像。这是我能做的最好的事情, http://dl.dropbox.com/u/3787481/Untitled%201.png
因此,现在我想知道是否可以使用另一种转换方式,使我能够可靠地找到水平线和垂直线(最好也可以是虚线)。
我知道此问题是可以解决的,因为我拥有Nuance和ABBYY OCR工具,它们可以可靠地提取水平和垂直线,并向我返回这些线的边界框。
谢谢!帕特里克