我有一个图像数据,如何将其分为x,y和值?
图像数据
[[38 0 0 ... 0 0 0]
[46 3 0 ... 0 0 0]
[46 3 0 ... 0 0 0]
...
[74 0 0 ... 0 0 0]
[74 0 0 ... 0 0 0]
[74 0 0 ... 0 0 0]]
应该是吗?
x = 0, y = 0, value = 38
x = 0, y = 1, value = 46
...
如何将其分成:
x = []
y = []
value = []
只有for
循环方法有效吗?
感谢您的帮助
答案 0 :(得分:3)
IIUC,我想您可以使用np.indices
。举个例子:
>>> img
array([[38, 0, 0, 0, 0, 0],
[46, 3, 0, 0, 0, 0],
[46, 3, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0],
[74, 0, 0, 0, 0, 0]])
value = img.flatten()
y,x = np.indices(img.shape).reshape(-1,len(value))
>>> x
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5])
>>> y
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5])
>>> value
array([38, 0, 0, 0, 0, 0, 46, 3, 0, 0, 0, 0, 46, 3, 0, 0, 0,
0, 74, 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 74, 0, 0, 0,
0, 0])
因此,在x
为0且y
为0的情况下,您得到value
38,在x
为0且y
为1的情况下,您得到{ {1}} 46,依此类推。
编辑:在您的评论中,您说过要过滤掉零。您可以使用value
和np.where
来做到这一点:
np.nonzero
答案 1 :(得分:0)
如果图像是彩色的,则通常为RGB格式(3通道),如果为灰度,则将具有1通道。
因此,数组的形状将为(img_height, img_width, number_of_channels)
通过了解形状,您可以正确使用imread
中的PIL
或imread
中的matplotlib
来加载图像,然后使用{{ 1}}。由于它是一个numpy数组,因此可以通过myarray = numpy.array(your_loaded_img)