將以下陣列視為具有三層(紅、綠、藍)的影像。對于影像中的每個位置,我想測驗其中一層是否有特定值(例如 99)。如果是這樣,則其他層中相同位置的值應替換為該特定值。
img = np.array([[[0, 99],
[2, 3]],
[[4, 5],
[6, 7]],
[[8, 9],
[10, 11]]])
期望的結果是:
img = [[[0, 99],
[2, 3]],
[[4, 99],
[6, 7]],
[[8, 99],
[10, 11]]]
我目前正在使用以下代碼來完成任務。
c= []
for i in range(img.shape[1]):
for j in range(img.shape[2]):
if np.any(img[:, i, j]==99):
c.append([99 for x in img[:, i, j]])
else: c.append(img[:, i, j])
new_img = [np.array([row[i] for row in c]).reshape((2,2)).tolist() for i in range(len(c))]
然而,這似乎有些復雜。你能推薦一個更好的方法嗎?謝謝您的幫助。
uj5u.com熱心網友回復:
任何通道中 99 像素的掩碼是
mask = (img == 99).any(0)
您可以直接應用此掩碼:
img[:, mask] = 99
或作為單行:
img[:, (img == 99).any(0)] = 99
uj5u.com熱心網友回復:
您可以通過以下方式做到這一點:
ind = np.argwhere(img == 99)[0, 1:] # [0, 1]
img[:, ind[0], ind[1]] = 99
# [[[ 0 99]
# [ 2 3]]
# [[ 4 99]
# [ 6 7]]
# [[ 8 99]
# [10 11]]]
這將僅在第一次出現 99 時起作用。因此,如果您有多個層包含 99 或每層中包含多個 99 的計數,請按照@Mad 解決方案執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488969.html
下一篇:巧妙地從另一個陣列的元素構造陣列
