![](/img/trans.png)
[英]Using Python Regex to Separate a Coordinate Pair into X and Y Commponents
[英]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.where
和np.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)
通过了解形状,您可以正确使用来自PIL
的imread
或来自matplotlib
imread
来加载图像,然后使用myarray = numpy.array(your_loaded_img)
将它们转换为数组。 因为它是一个numpy数组,你可以通过myarray[x,y]
调用单元格值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.