Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 从图像中提取表结构_Opencv - Fatal编程技术网

Opencv 从图像中提取表结构

Opencv 从图像中提取表结构,opencv,Opencv,我有很多像这样的图片 从图像中提取表结构的好方法是什么?我只对提取直线感兴趣 我一直在玩弄代码示例,结果非常有希望。我只是想知道是否有更好的方法?OpenCV有一种很好的检测线段的方法。以下是python中的代码片段: import math import numpy as np import cv2 img = cv2.imread('page2.png') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) lsd = cv2.createLineSe

我有很多像这样的图片

从图像中提取表结构的好方法是什么?我只对提取直线感兴趣


我一直在玩弄代码示例,结果非常有希望。我只是想知道是否有更好的方法?

OpenCV有一种很好的检测线段的方法。以下是python中的代码片段:

import math
import numpy as np
import cv2

img = cv2.imread('page2.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

lsd = cv2.createLineSegmentDetector(0)
dlines = lsd.detect(gray)

for dline in dlines[0]:
    x0 = int(round(dline[0][0]))
    y0 = int(round(dline[0][1]))
    x1 = int(round(dline[0][2]))
    y1 = int(round(dline[0][3]))
    cv2.line(img, (x0, y0), (x1,y1), 255, 1, cv2.LINE_AA)

    # print line segment length
    a = (x0-x1) * (x0-x1)
    b = (y0-y1) * (y0-y1)
    c = a + b
    print(math.sqrt(c))

cv2.imwrite('page2_lines.png', img)

OpenCV有一种很好的检测线段的方法。以下是python中的代码片段:

import math
import numpy as np
import cv2

img = cv2.imread('page2.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

lsd = cv2.createLineSegmentDetector(0)
dlines = lsd.detect(gray)

for dline in dlines[0]:
    x0 = int(round(dline[0][0]))
    y0 = int(round(dline[0][1]))
    x1 = int(round(dline[0][2]))
    y1 = int(round(dline[0][3]))
    cv2.line(img, (x0, y0), (x1,y1), 255, 1, cv2.LINE_AA)

    # print line segment length
    a = (x0-x1) * (x0-x1)
    b = (y0-y1) * (y0-y1)
    c = a + b
    print(math.sqrt(c))

cv2.imwrite('page2_lines.png', img)

请浏览我的Github存储库

所开发的代码通过保持空间坐标不变来检测表格并提取信息

代码检测表中的行,如下图所示。我希望它能解决你的问题。


下面显示了以表格形式提取的输出。

请浏览我的Github存储库

所开发的代码通过保持空间坐标不变来检测表格并提取信息

代码检测表中的行,如下图所示。我希望它能解决你的问题。


以表格形式提取的输出如下图所示。

您也可以尝试,根据最小y和最大x坐标(这里基本上是ROI矩形的两个对角)获取所有水平线和ROI,但结果非常糟糕。好吧,这很奇怪,如果我理解正确,你想只提取中间的表格,对吗?我只想提取水平线和垂直线的网格。在这种情况下,你也可以尝试。你也可以尝试,获取所有水平线,并基于最小y和最大x坐标(基本上是ROI矩形的两个对角)获得ROI我已经试过了,但结果很糟糕。好吧,这很奇怪,如果我理解正确,你想只提取中间的表吗?我只想提取水平线和垂直线的网格。在这种情况下,你也可以尝试。我想知道如何提取由代码创建的段。有什么建议吗?这没有给我表中所有的线段:(代码有什么快速修复方法吗?我想知道如何提取代码创建的线段。有什么建议吗?这没有给我表中所有的线段:(代码有什么快速修复方法吗?