【发布时间】:2021-04-17 05:05:01
【问题描述】:
我知道之前有人问过这个问题,但对于我的特定用例似乎没有任何内容。
我有一个 numpy 数组 obs,它代表彩色图像,形状为 (252, 288, 3)。
我想将不是纯黑色的每个像素都转换为纯白色。
我尝试过的是obs[obs != [0, 0, 0]] = [255, 255, 255],但它给出了以下异常:
ValueError: NumPy boolean array indexing assignment cannot assign 3 input values to the 807 output values where the mask is true
结果与obs[obs[:, :] != [0, 0, 0]] = [255, 255, 255] 相同。另外,(obs[:, :] != [0, 0, 0]).shape 是 (252, 288, 3),我不明白为什么它不是简单的 (252, 288)(布尔矩阵)。
我考虑过使用obs[obs != 0] = 255,但这不会产生我想要的效果,因为纯绿色的像素 ([0, 255, 0]) 将被处理组件明智并且在过滤后仍然是[0, 255, 0],而不是实际上是白色的 ([255, 255, 255])。
为什么我到现在为止尝试过的方法都不起作用,我应该怎么做?
【问题讨论】:
-
这不是你想要的吗? obs[obs != 0] = 255
-
@Stepan 我已经在问题中解释了这一点。我已经更正了一些错字,现在应该更清楚了。
-
毫无疑问,单通道(灰度)甚至布尔(真/假)结果足以代表您所需的黑白输出,而不需要 3 倍的 RAM,而 RGB 结果只包含黑白的?
-
我的回答或其他人是否解决了您的问题?如果是这样,请考虑接受它作为您的答案 - 通过单击计票旁边的空心对勾/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 meta.stackexchange.com/questions/5234/…
标签: python arrays numpy image-processing slice