【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)
输出
[[[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)

  这样一行简单的代码就可以简单地得到三个通道值等于指定值位置。同样的道理,更高维度的数组也能进行这样的操作。

已完

  • 11
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值