我已将图像标记为生成带有标记的numpy数组,例如
array([[0, 1, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 0, 0, 0],
...,
[0, 0, 0, ..., 0, 0, 0],
[2, 2, 0, ..., 0, 0, 0],
[2, 2, 0, ..., 0, 0, 0]], dtype=uint8)}
将此转换为数据集的最有效方法是什么:
x-coord | y-coord | label
-------------------------
0 | 0 | 0
0 | 1 | 1
0 | 2 | 0
...
1024 | 0 | 2
1024 | 1 | 2
等
我不介意输出格式是什么,但我希望字典最方便。
这是我当前的慢代码,它遍历图像的坐标:
(x, y) = img.shape
for x1, x2 in np.ndindex((x, y)):
data[(x1, x2)] = img[x1, x2]
我这样做的原因是我想为每个像素为数组添加其他功能。
答案 0 :(得分:1)
您可以使用np.meshgrid
和np.vstack
创建一个Nx3
numpy数组,其格式与所需的格式相同,并采用矢量化方式,如下所示 -
In [103]: img
Out[103]:
array([[0, 1, 1, 0, 0],
[0, 1, 0, 0, 1],
[1, 1, 1, 1, 2],
[2, 1, 1, 0, 2]])
In [104]: M,N = img.shape
In [105]: Y,X = np.meshgrid(np.arange(N),np.arange(M))
In [106]: np.vstack((X,Y,img)).reshape(3,-1).T
Out[106]:
array([[0, 0, 0],
[0, 1, 1],
[0, 2, 1],
[0, 3, 0],
[0, 4, 0],
[1, 0, 0],
[1, 1, 1],
[1, 2, 0],
[1, 3, 0],
[1, 4, 1],
[2, 0, 1],
[2, 1, 1],
[2, 2, 1],
[2, 3, 1],
[2, 4, 2],
[3, 0, 2],
[3, 1, 1],
[3, 2, 1],
[3, 3, 0],
[3, 4, 2]])