Python 从PNG中提取数值信息

Python 从PNG中提取数值信息,python,image-processing,Python,Image Processing,我很抱歉,如果这个问题不适合这个网站 我有几百张图片;每个图形都是一个PNG。它们看起来都是这样的: x轴标有所有可能的类别(等级)。y轴表示获得某个分数的孩子的百分比。所有的图表都遵循这种格式;没有任何偏差 使用Python,从这样的图像中提取数据的最有效方法是什么?我的目标是提取每个年级类别的百分比值,这样我可以做一些进一步的分析——我试图看看哪些班级的A+/A分数百分比最高,这样我就可以为下学期做计划 当然,我真正需要的只是酒吧的相对高度,我可以根据这些信息计算比率。这可以通过使用Ope

我很抱歉,如果这个问题不适合这个网站

我有几百张图片;每个图形都是一个PNG。它们看起来都是这样的:

x轴标有所有可能的类别(等级)。y轴表示获得某个分数的孩子的百分比。所有的图表都遵循这种格式;没有任何偏差

使用Python,从这样的图像中提取数据的最有效方法是什么?我的目标是提取每个年级类别的百分比值,这样我可以做一些进一步的分析——我试图看看哪些班级的A+/A分数百分比最高,这样我就可以为下学期做计划


当然,我真正需要的只是酒吧的相对高度,我可以根据这些信息计算比率。这可以通过使用OpenCV之类的工具进行大津阈值化来实现;有没有更简单的方法来做我想做的事?我相信这是以前做过的;如果有人能给我指出一个(最好是Python)repo或教程,那就太好了。

假设所有的图形都有相同的尺寸、列数等,一种方法是获得每列的高度(以像素为单位),然后比较它们。要获得每列的高度,可以使用库

首先,根据您上传的图像,每列的底部位于像素y=523处(图像顶部为y=0),第一列的中心位于x=136处。此外,每列的中心在最后一列之后为45或46像素(这交替),共有15列

基于此,您可以使用此脚本获取图形中每列的高度:

from PIL import Image
def col_heights(filename):
    img = Image.open(filename)
    cols = []
    sy = 523  # The y level of the bottom of each column
    x = 136  # The x position of the first column
    add_45_or_46 = False  # False to increment by 45, True for 46
    
    num_cols = 15
    for _ in range(num_cols):
        y = sy
        while img.getpixel((x, y)) != (255, 255, 255, 255):
            y -= 1  # Work upwards
        cols.append(sy - y)
        
        x += 46 if add_45_or_46 else 45
        add_45_or_46 = not add_45_or_46
    
    img.close()
    return cols
那么这有什么用呢?它首先打开图像,然后设置
x
(第一列x位置)、
sy
(每列的起始y级别)的起始值,以及是否添加45或46以进入下一列。然后,对于每一列,它向上工作,直到在列的底部找到一个与像素不匹配的像素(即不是白色),然后将该列的高度添加到列高度列表中


例如,对于您上载的图形,每列的高度是
[220、430、242、143、54、32、0、10、0、10、0、0、43、176、21]

所有图形的
x轴标签是否相同?以及所有图形的尺寸
即宽度和高度是否相同,有一些工具和服务可以做这种事情。试着在谷歌上搜索“从图像中提取图形”,并通读搜索结果。@Epsi95-你的两个问题的答案都是肯定的。这太棒了!正是我需要的。