如何将图像数据分成x,y坐标? (蟒蛇)

时间:2018-10-12 01:17:00

标签: python numpy

我有一个图像数据,如何将其分为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循环方法有效吗?

感谢您的帮助

2 个答案:

答案 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,依此类推。

编辑:在您的评论中,您说过要过滤掉零。您可以使用valuenp.where来做到这一点:

np.nonzero

答案 1 :(得分:0)

如果图像是彩色的,则通常为RGB格式(3通道),如果为灰度,则将具有1通道。 因此,数组的形状将为(img_height, img_width, number_of_channels)

通过了解形状,您可以正确使用imread中的PILimread中的matplotlib来加载图像,然后使用{{ 1}}。由于它是一个numpy数组,因此可以通过myarray = numpy.array(your_loaded_img)

调用单元格值