【问题标题】:replacing pixel value of one channel based on values of other two channels根据其他两个通道的值替换一个通道的像素值
【发布时间】:2021-11-11 10:35:32
【问题描述】:

target_positive_replace = np.where(positive_replace[...,0]>0 or positive_replace[...,1]>0 or positive_replace[...,2]>0),target_positive_replace[...,1]=255 ,0)

我有一个三通道 RGB 图像。

想要执行以上操作。

如果通道中的给定值之一大于零(通道值>0)。我想让那个像素变成绿色。 (0,255,0)。

ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

【问题讨论】:

  • 发布代码时,请确保它是minimal reproducible example。当您发布错误消息时,请确保复制粘贴完整的内容,包括堆栈跟踪等。由于您在此处提供的信息很少,因此很难看出哪里出了问题。
  • 也就是说,or 期望两边都有一个值。合并布尔数组,使用|

标签: python numpy image-processing


【解决方案1】:

您的问题是positive_replace[...,x] 返回的数组无法用>0(错误) 检查。因此,正如错误消息所述,您可以使用 a.all()a.any() 检查返回数组的每个元素,或者您必须确保检索整数颜色值。

编辑

以上只是部分正确。正如@Cris Luengo 在他的评论中所说,or 需要一个值,而不是一个数组。因此,要么将单个值与a.all()a.any() 进行比较,要么将positive_replace[...,x]>0 返回的布尔数组与| 进行比较

【讨论】:

  • target_positive_replace[np.where ( ((target_positive_replace[...,0]>0).all(axis=0)) or ((target_positive_replace[...,2]>0).all(axis=2)))]=[0,255,0]
  • 具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all()
  • 上面的代码给出了错误的值
  • target_positive_replace = np.where(((target_positive_replace[...,0]>0).any() or (target_positive_replace[...,1]>0).any() or (target_positive_replace[...,2]>0).any()) ,target_positive_replace[...,1],0) 这项工作感谢您的时间 Zeg du Toit
  • target_positive_replace[...,0].all()>0
猜你喜欢
  • 2021-10-09
  • 1970-01-01
  • 2022-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2021-02-20
相关资源
最近更新 更多