2
標量/布爾我有一個3D陣列(X,Y,RGBA)和我的目標是:numpy的有條件替換陣列
找到哪些像素是空白的RGBA = [0,0,0,0],然後改變它們的顏色變成藍色,其他像素變成綠色。
據我看到它可以在2個步驟進行:
1-創建一個500×500陣列,bool如果像素具有值,假如果空白
2-然後應用一個函數來經過無數次搜索(我不是python嚮導)後,我設法以pythonic的方式實現了1-(至少我的希望)。[0,255,055]和False by [0,255,0,255]
..)
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: shape mismatch: objects cannot be breascast to a single shape
事實上,第2步可以通過「如何用numpy.ndarray中的數組/矢量替換標量/布爾值?」來總結。
非常整齊的語法。 thx,所有你的答案完美工作。只有一個備註:如果像素數組爲[0,-15,15,0]否,img.sum(axis = 2)> 0可以返回True。但在我的情況下,它完美的作品,因爲所有的價值都是積極的。 thx再次。 – comte
@comte是的,它可以,我補充說明。我從等於255的值判斷,你的顏色是正值。 – alko