使用 cv2 處理 PNG 影像,我希望某些區域是透明的。將點 [0, 0, 0, 255] 更改為 [0, 0, 0, 0]。
例如,
# a is ndarray(880, 1330, 4)
a = [[[100, 90, 80, 255],
[80, 10, 10, 255],],
...,
[[0, 0, 0, 255],
[0, 0, 0, 255],
...,
]]
# i want
b = [[100, 90, 80, 255],
[80, 10, 10, 255],],
...,
[[0, 0, 0, 0],
[0, 0, 0, 0],
...,
]]
謝謝。
uj5u.com熱心網友回復:
您需要創建一個蒙版。
這是一個簡單的例子:
import numpy as np
# Create some data
a = (np.random.rand(10, 10, 4)*255).astype(int)
a[ :5, :5, :] = 0
a[:, :, 3] = 255
b = a.copy()
現在創建一個蒙版:
mask = (a[:,:,0] == 0) & (a[:,:,1] == 0) & (a[:,:,2] == 0)
print(mask*1)
array([[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
現在將必要的值設定為 0
b[mask, 3] = 0
print(b)
array([[[ 0, 0, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0],
[ 0, 0, 0, 0],
[204, 156, 208, 255],
[ 59, 220, 240, 255],
[217, 175, 19, 255],
<. other rows..>
[235, 127, 178, 255],
[168, 29, 119, 255],
[ 25, 228, 112, 255],
[110, 237, 39, 255],
[164, 23, 191, 255],
[169, 232, 5, 255],
[164, 59, 206, 255],
[ 52, 65, 60, 255]]])
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471427.html
上一篇:如何替換多維陣列中的串列?
