Я надеялся, что решу эту проблему до того, как закончу пост, но вот оно:
У меня есть массив array1
формы (4808L, 5135L), и я пытаюсь выбрать прямоугольное подмножество массива. В частности, я пытаюсь выбрать все значения в строках 4460:4807
и все значения в столбцах 2718:2967
.
Для начала я создаю маску той же формы, что и array1
, например:
mask = np.zeros(array1.shape[:2], dtype = "uint8")
mask[array1== 399] = 255
Затем я пытаюсь найти индекс точек, где 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]
Где: верхний_левый = массив([4460, 2718], dtype=int64) нижний_правый = массив([4807, 2967], dtype=int64)
cmask
выглядит правильно. Затем, используя top_left
и bottom_right
, я пытаюсь создать подмножество array1
, используя:
crop_array = array1[top_left[0]:bottom_right[0]+1, top_left[1]:bottom_right[1]+1]
Это приводит к тому, что crop_array
имеет ту же форму, что и cmask
, но значения заполняются неправильно. Поскольку cmask[0][0] = 0
я ожидаю, что crop_array[0][0]
также будет равно нулю.
Как заполнить crop_array
значениями из array1
, сохранив при этом структуру cmask
?
Заранее спасибо.