如何有效地将熊猫数据框转换为图像数组?

时间:2019-07-18 08:17:20

标签: python pandas image numpy dataframe

我有一个大熊猫数据框,其中的X,Y和I列。X和Y是像素坐标,我想说是0到255之间的强度值,我想在相应的X和Y处显示它位置。

该图像的每个像素都没有一个条目,因此未在数据框中列出的所有像素的I值都设置为0。

因此,我使用图像尺寸初始化了一个二维数组img。然后,我已经尝试过类似

img.at[df.X,df.Y] = df.I

这不起作用。我认为一个简单的for循环可以解决此问题,但是我想知道是否有更有效的方法(例如,调用花哨的numpy / opencv /任何我不知道的函数。。 )。

2 个答案:

答案 0 :(得分:1)

您应该像这样使用Pandas的pivot功能:

df.pivot('Y', 'X', 'I').values

这将导致如下所示:

# array([[ 255,  34],
#       [  56,  nan]])

然后,您只需要将nan值替换为0。

答案 1 :(得分:1)

最简单的方法可能是使用scipy.sparse数组,因为coo_matrix的构建与输入相同。

from scipy.sparse import coo_matrix

sparse_image = coo_matrix((df.I, (df.X, df.Y)), shape = image.shape)
image = sparse_image.todense()
如果在此步骤之前累积coo_matrix值,

I也具有一些不错的功能。