gpt4 book ai didi

python - 从扫描文档中的图表中提取数据

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

编辑:这是对我之前提出的一个问题的更深入的解释,这个问题对我来说仍然没有解决。

我目前正在尝试编写一些代码,可以从书中的一些不常见的图表中提取数据。我扫描了这本书的页面,并通过使用 opencv 我想检测图表的一些特征,以便将它们转换成可用的数据。在左图中,我正在寻找“三角形”的高度,在右图中,我正在寻找从中心到虚线与灰色区域相交的点的距离。在这两种情况下,我都想将这些值转换为数字数据以供进一步使用。

enter image description here

对于左图,我想检测所有单独的颜色并通过计算该颜色的像素数量来计算每个扇区的面积。当我知道这些扇区的面积时,我可以使用基础数学轻松计算出它们的高度。以下代码片段显示了我在识别不同颜色方面的进展。但是我无法准确地完成这项工作。它似乎也总是检测到其他扇区的某些颜色,或者检测不到一个扇区的所有像素。我认为这与我使用的边界有关。我不太清楚如何让它们工作。有人知道我如何确定这些值吗?

import numpy as np
import cv2

img = cv2.imread('images/test2.jpg')

lower = np.array([0,0,100])
upper = np.array([50,56,150])

mask = cv2.inRange(img, lower, upper)
output = cv2.bitwise_and(img, img, mask = mask)

cv2.imshow('img', img)
cv2.imshow('mask', mask)
cv2.imshow('output', output)
cv2.waitKey(0)
cv2.destroyAllWindows()

对于右图,我仍然不知道如何从中提取数据。我想通过检测所有的虚线来识别中心,然后通过检测这些虚线与灰色区域的交点,我可以测量中心与这些交点之间的距离。但是我还不知道如何正确地做到这一点,因为它听起来很复杂。下面的代码片段显示了我在线路检测方面取得的进展。同样在这种情况下,检测远非准确。有人知道如何解决这个问题吗?

import numpy as np
import cv2

# Reading the image
img = cv2.imread('test2.jpg')
# Convert the image to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
# Apply edge detection
edges = cv2.Canny(gray,50,150,apertureSize = 3)

# Line detection
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength=50,maxLineGap=20)

for line in lines:
x1,y1,x2,y2 = line[0]
cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)

cv2.imwrite('linesDetected.jpg',img)

最佳答案

对于左图,使用您的方法,尝试查看 RGB 直方图,颜色应该是显着的峰值,如果您想使用段的相对面积。

另一种选择是使用 Hough Circle Transform ,这应该适用于圆段。另见 here .

为了正确的图像......让我想想......

您可以创建一个内部没有数据的“空”图表。您知道圆段(“蛋糕 block ”)的位置。然后,您可以通过使用灰色阈值、RGB 阈值或 Find Contours 来识别数据所在的区域(深色区域)。或寻找 Watershed / Distance Transform .

最后的想法是在清除的图像和找到的片段(您的数据)之间进行 bool 叠加。然后你可以确定你的圆段的哪一部分被覆盖,或者知道中心,找到离中心最远的点。

关于python - 从扫描文档中的图表中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415556/

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