Вы можете сделать это с помощью Numpy, то есть для всех библиотек Python ( OpenCV , PIL / Pillow , scikit-image , Wand , vips ) используйте снизу.
Итак, предположим, что мы создаем фиктивное изображение, подобное этому:
import numpy as np
# Synthetically create big image
big = np.arange(48, dtype=np.uint8).reshape((6,8))
Это будет выглядеть так :
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47]], dtype=uint8)
Если вам требуется каждая вторая строка и каждый второй столбец, используйте:
subsampled = big[0::2, 0::2]
, и вы получите это в своем subsampled
изображении:
array([[ 0, 2, 4, 6],
[16, 18, 20, 22],
[32, 34, 36, 38]], dtype=uint8)
Если вы хотите повторно применить его, сделайте то же самое снова:
subsampledx2 = subsampled[0::2, 0::2]
, и вы получите это:
array([[ 0, 4],
[32, 36]], dtype=uint8)
Я не уверен, как вы надеясь, что взятие каждой второй строки и каждого второго столбца уменьшит изображение размером 640x480 до 74x55, может быть, вы планируете применять его рекурсивно?
Извините, если у вас есть цветное изображение с 3 каналами RGB, вы можно использовать дополнительное двоеточие, чтобы явно получить все 3 канала RGB:
subsampled = big[0::2, 0::2, :]