所以我有一個代表 opencv 影像的 numpy 陣列,我想獲取 3d 陣列中 1d 陣列的所有值都滿足如下條件的所有位置:
array1 = [[[186 123 231], [184 126 76]], [[224 187 97], [187 145 243]]]
array2 = [150, 180, 250]
條件應該是 array1 的第一個元素應該大于它們在 array2 中的相應值,而第二個和第三個元素應該小于它們在 array2 中的相應值以獲得此輸出
[[0 0], [0 1], [1 1]
表示 array1 中的第一個、第二個和第四個元素滿足條件。我知道可能沒有比我剛才更糟糕的表達方式了,但我希望有人仍然可以幫助我。
uj5u.com熱心網友回復:
- 麻木的解決方案。創建一個掩碼并使用 np.where
import numpy as np
array1 = np.array([[[186, 123, 231], [184, 126, 76]], [[224, 187, 97], [187, 145, 243]]])
array2 = np.array([150, 180, 250])
mask = (array1[:, :, 0] > array2[0]) & (array1[:, :, 1] < array2[1]) & (array1[:, :, 2] < array2[2])
print(mask)
positions = np.stack(np.where(mask)).T
print(positions)
結果:
[[0 0]
[0 1]
[1 1]]
- 您也可以考慮cv2.inRange:
import numpy as np
import cv2
array1 = np.array([[[186, 123, 231], [184, 126, 76]], [[224, 187, 97], [187, 145, 243]]])
array2 = np.array([150, 180, 250])
# fill lower/upper bounds with artificial 0, 255 values
mask = cv2.inRange(array1, (150, 0, 0), (255, 180, 250))
positions = np.stack(np.where(mask)).T
print(positions)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/519646.html
上一篇:創建一個回圈以計數0-6100次
下一篇:從較大的陣列中切出較小的陣列形狀
