【Python】如何获取Numpy三维数组中⽬标值的位置
前⾔
  这其实算得上是⼀个图像处理中遇到的问题。当我们读⼊⼀张彩⾊图像后,希望知道图像中所有RGB值等于对应值的位置。例如,读⼊⼀张图⽚后,希望获取到所有像素值为(100,100,100)的像素点的坐标。⾸先,做⼀个实验。
代码
import numpy as np
img = np.random.randint(0,255,[3,3,3])# 随机⽣成⼀个3*3*3的矩阵,模拟RGB图
color =[100,100,100]# ⽬标颜⾊三通道值
img[1,1,:]=[100,100,100]# 使(1,1)处的值为所需值
location =(img == color)
print(location)
python获取数组长度
输出
[[[False False False]
[False False False]
[False False False]]
[[False False False]
[True True True]
[False False False]]
[[False False False]
[False False False]
[False False False]]]
  这样的⼀个实验得到的location是三维的Bool类型数组,⽽我们需要的其实是⼆维的数组。所以此时⼀般的思路就是,三个通道取与。代码
import numpy as np
img = np.random.randint(0,255,[3,3,3])# 随机⽣成⼀个3*3*3的矩阵,模拟RGB图
color =[100,100,100]# ⽬标颜⾊三通道值
img[1,1,:]=[100,100,100]# 使(1,1)处的值为所需值
location =(img == color)
# location = location[:, :, 0] * location[:, :, 1] * location[:, :, 2]
location = location[:,:,0]& location[:,:,1]& location[:,:,2]
print(location)
输出
[[False False False]
[False True False]
[False False False]]
  但是再仔细⼀想,Numpy中有⼀个取与的函数 np.all() ,所以我们上⾯的代码可以直接简化。
代码
import numpy as np
img = np.random.randint(0,255,[3,3,3])# 随机⽣成⼀个3*3*3的矩阵,模拟RGB图
color =[100,100,100]# ⽬标颜⾊三通道值
img[1,1,:]=[100,100,100]# 使(1,1)处的值为所需值
location = np.all((img == color), axis=2)# 在第⼆个维度上取与
print(location)
  这样⼀⾏简单的代码就可以简单地得到三个通道值等于指定值位置。同样的道理,更⾼维度的数组也能进⾏这样的操作。已完

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。