繁体   English   中英

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

[英]How to separate image data into x, y coordinate? (python)

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

谢谢你的帮助

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,得到value 46,依此类推。

编辑 :在您的评论中,您说您要过滤掉零。 您可以使用np.wherenp.nonzero执行此np.nonzero

y,x = np.where(img)

value = img[np.nonzero(img)]

>>> y
array([0, 1, 1, 2, 2, 3, 4, 5])
>>> x
array([0, 0, 1, 0, 1, 0, 0, 0])
>>> value
array([38, 46,  3, 46,  3, 74, 74, 74])

如果您的图像是彩色的,它通常是RGB格式(3个通道),如果它是灰度,它将有1个通道。 所以数组的形状将是(img_height, img_width, number_of_channels)

通过了解形状,您可以正确使用来自PILimread或来自matplotlib imread来加载图像,然后使用myarray = numpy.array(your_loaded_img)将它们转换为数组。 因为它是一个numpy数组,你可以通过myarray[x,y]调用单元格值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM