循环图像,保存ID名称并将其相应地存储在datafram中

2024-05-15 08:39:28 发布

您现在位置:Python中文网/ 问答频道 /正文

你好

简介:

我试着建立一个panda数据框,把一些离散的化学值和一些图像连接起来。这比我现在的水平高了一点点,所以我希望能得到一些帮助。你知道吗

到目前为止我得到了什么:

我目前已经从提供的数据表中切出两列,如下所示。 DF1

现在我这里有1688个数据点,有1225个大小为10x10x4(RGBA)的图像要与之关联。(1225,10,10,4)单位8

这些图像都具有在第1列中看到的相同的示例ID名称。我的目标是运行一个循环,从文件夹中取出图像,将它们展平并重新整形为300x1,然后将它们存储在第三列中,并与Sample\u ID进行检查。这意味着正确的图像必须对应于正确的Sample\u ID

我已经搜过网了,这里是stackoverflow。我已经尝试了4个不同的循环图像功能,从这里没有给我很好的结果,我的期望。你知道吗

到目前为止,我的最佳选择似乎是使用glob将其全部放入numpy文件中。但我确实需要一个循环函数,将图像与相应的id和Ni值链接起来。你知道吗

关于如何加载图像并存储其ID值以便与现有数据帧交叉引用的任何建议。你知道吗

谢谢你抽出时间。你知道吗


Tags: 数据sample图像文件夹名称id示例目标
1条回答
网友
1楼 · 发布于 2024-05-15 08:39:28

假设图像id在其名称中并使用matplotlib.image.imread

path = '.' # current directory
filenames = [os.path.abspath(os.path.join(path, x)) for x in os.listdir(path) if '.png' in x or '.jpg' in x]

>>> filenames
['image_0.png',
 'image_1.png',
 'image_2.png',
 'image_3.png',
 'image_4.png',
 'image_5.png',
 'image_6.png',
 'image_7.png',
 'image_8.png',
 'image_9.png']

将图像读入数据帧并将其名称添加为列:

from matplotlib.image import imread
images_df = pd.DataFrame([[imread(filename).flatten()] for filename in filenames], columns=['images'])
images_df['id'] = filenames
images_df['id'] = images_df['id'].apply(os.path.basename)
>>> images_df

                                              images           id
0  [0.4627451, 0.05490196, 0.8745098, 0.79607844,...  image_0.png
1  [0.20784314, 0.93333334, 0.73333335, 0.6156863...  image_1.png
2  [0.4117647, 0.3254902, 0.8784314, 0.16470589, ...  image_2.png
3  [0.8627451, 0.6862745, 0.78431374, 0.6431373, ...  image_3.png
4  [0.44705883, 0.627451, 0.57254905, 0.78431374,...  image_4.png
5  [0.7490196, 0.007843138, 0.25490198, 0.1372549...  image_5.png
6  [0.039215688, 0.14901961, 0.5882353, 0.5137255...  image_6.png
7  [0.24705882, 0.94509804, 0.1882353, 0.38039216...  image_7.png
8  [0.35686275, 0.047058824, 0.56078434, 0.062745...  image_8.png
9  [0.8, 0.23921569, 0.99607843, 0.89411765, 0.23...  image_9.png

从图像中提取id:

>>> images_df['id'] = images_df['id'].str.split('.').str[0]
0    image_0
1    image_1
2    image_2
3    image_3
4    image_4
5    image_5
6    image_6
7    image_7
8    image_8
9    image_9
Name: id, dtype: object

如果Sample_ID是1,则images_df['id']需要转换为整数。你知道吗

连接数据帧:

pd.merge(images_df, new_data_rdy, left_on='id', right_on='Sample_ID')

相关问题 更多 >