I was hoping I would solve this before I finished the post, but here it goes:
I have an array array1 with a shape (4808L, 5135L) and I am trying to select a rectangular subset of the array. Specifically, I am trying to select the all values in rows 4460:4807 and all the values in columns 2718:2967.
To start I create a mask of the same shape as array1 like:
mask = np.zeros(array1.shape[:2], dtype = "uint8")
mask[array1== 399] = 255
Then I am trying to find the index of the points where mask = 255:
true_points = np.argwhere(mask)
top_left = true_points.min(axis=0)
# take the largest points and use them as the bottom right of your crop
bottom_right = true_points.max(axis=0)
cmask = mask[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]
Where: top_left = array([4460, 2718], dtype=int64) bottom_right = array([4807, 2967], dtype=int64)
cmask looks correct. Then using top_left and bottom_right I am trying to subset array1 using:
crop_array = array1[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]
This results in a crop_array have the same shape of cmask, but the values are populated incorrectly. Since cmask[0][0] = 0 I would expect crop_array[0][0] to be equal to zero as well.
How do I poulate crop_array with the values from array1 while retaining the structure of the cmask?
Thanks in advance.