'comparing numpy arrays such that they equal each other if they both fall within the same range of values

Suppose that I have a 3d numpy array where at each canvas[row, col], there is another numpy array in the format of [R, G, B, A].I want to check if the numpy array at canvas[row, col] is equal to another numpy array [0, 0, 0, 240~255], where the last element is a range of values that will be accepted as "equal". For example, both [0,0,0, 242] and [0,0,0, 255] will pass this check. Below, I have it so that it only accepts the latter case.

(canvas[row,col] == np.array([0,0,0,255])).all()

How might I write this condition so it does as I described previously?



Solution 1:[1]

You can compare slices:

(
    (canvas[row, col, :3] == 0).all() # checking that color is [0, 0, 0]
    and 
    (canvas[row, col, 3] >= 240) # checking that alpha >= 240
)

Also, if you need to check this on a lot of values, you can optimize it with vectorization, producing a 2D array of boolean values:

np.logical_and(
    (canvas[..., :3] == 0).all(axis=-1), # checking that color is [0, 0, 0]
    (canvas[..., 3] >= 240) # checking that alpha >= 240
)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 evtn