Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将图像数据分离为x、y坐标?(python)_Python_Numpy - Fatal编程技术网

如何将图像数据分离为x、y坐标?(python)

如何将图像数据分离为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 ... 我如

我有一个图像数据,我怎么能把它分成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 = []
只有
循环方法才有效


感谢您的帮助

如果您的图像是彩色的,它通常是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
感谢您的回复,这是一个很大的帮助