【发布时间】:2014-01-09 07:14:21
【问题描述】:
我有一个 3D 数组 (x, y, RGBA),我的目标是:
找出哪些像素是空白的 RGBA=[0,0,0,0],然后将它们的颜色更改为蓝色,并将其他像素的颜色更改为绿色。
据我所知,它可以分两步完成:
1- 创建一个 500x500 数组,如果像素有值,则布尔值为 True,如果为空白,则为 False
2- 然后应用一个函数将 True 替换为 [0,0,255,255] 并将 False 替换为 [0,255,0, 255]
经过多次搜索(我不是 Python 向导),我设法以 Python 的方式实现了 1-(至少我的希望......)
img.shape
>(500, 500, 4)
img_bool = np.equal(img[:,:], [0, 0, 0, 0]).all(axis=2)
img_bool.shape
>(500, 500)
我对第 2 步的猜测是尝试这样的语法:
img_final = np.where(img_bool, [0,0,255,255], [0,255,0,255])
或
np.choose(img_bool, [[0,0,255,255],[0,255,0,255], out=img_final)
但它们给出了相同的错误(非常合乎逻辑,因为两个表达式实际上可能做同样的事情)
ValueError:形状不匹配:对象不能被转换为单个形状
事实上,第 2 步可以总结为“如何用 numpy.ndarray 中的数组/向量替换标量/布尔值?”
【问题讨论】: