python - 替换所有高于阈值的 rgb 值
问题描述
我有一个充满 RGB 值的 numpy 3 d 数组,例如 shape = (height,width,3)
matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])
如果任何值高于阈值,我必须替换 RGB 值,例如阈值 = 0.8,replacement = [2,2,2] 然后
matrix = [[[0,0.5,0.6],[2,2,2]]
如何使用 numpy 以高效的方式做到这一点?目前我正在使用双循环并检查是否有任何 rgb 值高于阈值,我替换它但是对于 n = 4000 数组来说这很慢。
我如何使用 numpy 更有效地做到这一点,也许使用 np.where ?
解决方案
我已经将您的矩阵扩展了另一个width
维度。
matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])
np.any
您可以在轴 2 上使用(从 0 开始,因此是第三个轴)构建蒙版:
mask = np.any((matrix > 0.8), axis=2)
# mask:
array([[False, True],
[False, True]], dtype=bool)
matrix[mask] = np.array([2,2,2])
你的结果matrix
:
array([[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]],
[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]]])
推荐阅读
- javascript - 自动填充图片网址
- angular - NativeScript 刷新后拉到 ActionBar 后面的刷新页面 | nativescript-pulltorefresh
- r - R闪亮:可以通过条件面板选择输入
- c# - 使用一个登录表单进行管理员和用户登录
- code-push - code-push:如何查找从 appcenter 网站添加的应用程序的部署密钥(添加新应用程序选项)
- vb.net - VB.net Winform 自动完成匹配字符串的任何部分
- solr - 如何使用隐式路由设置 solr 集群(v4.9.1)
- push-notification - 如何在 FCM UI 中定位特定受众?
- php - MYSQL - 两个表从每个用户的第二个表最后跟踪的行中获取记录
- javascript - React Native - 使用 NativeBase Drawer 时无法读取未定义的属性“_root”