如何将图像数据分离为x、y坐标?(python)
我有一个图像数据,我怎么能把它分成x,y和值呢 图像数据如何将图像数据分离为x、y坐标?(python),python,numpy,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 ... 我如
[[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 = []
只有循环方法才有效
感谢您的帮助如果您的图像是彩色的,它通常是RGB格式(3个通道),如果是灰度的,它将有1个通道。
因此,阵列的形状将是(img\u高度、img\u宽度、信道数)
通过了解形状,您可以正确使用PIL
中的imread
或imread
从matplotlib
加载图像,然后使用myarray=numpy.array(您的\u加载的\u img)
将它们转换为数组。由于它是一个numpy数组,您可以通过myarray[x,y]
IIUC调用单元格值,我认为您可以使用np.index
。以你为例:
>>> 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
执行此操作:
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])
我想在值中筛选0如何?这意味着,如果value=0,x,y不会记录它,请参见我的eidt,您可以使用np进行记录。其中和np.non-zero
感谢您的回复,这是一个很大的帮助