Как разбить строки и столбцы на равные части - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть изображение в numpy.array, и мне нужно разбить все строки на 4 «равные» (не считая нечетных) группы и 4 группы столбцов. Я попробовал это:

for count in range(0, camera.shape[0], camera.shape[0] // 4):

    pp.figure()

    if count == 0:
        pp.imshow(camera[0:camera.shape[0] // 4:, :], cmap='gray')

        continue

    pp.imshow(camera[count: count * 2:, :], cmap='gray')

    # pp.imshow(camera[0:camera.shape[0] // 4:, :], cmap='gray')

pp.show()

Результат: enter image description here Но у этого подхода есть проблема с первым циклом и begin:end:step. Несколько советов?

Я также сделал это изображение, чтобы проиллюстрировать, что я хочу:

enter image description here

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете использовать свою логику с функцией zip и динамически разделять: *

def split(img, rows, cols):
    '''
        Split array in n rows and columns

        Parameters
        ----------

        img:
            Arbitrary Numpy array

        rows:
            Number of rows to split the array

        cols:
            Number of cols to split the array

        Usage
        -----

        >>> split(skimage.data.camera(), 4, 4)

        Return
        ------

        Python list containing the subsets
    '''

    cache = []

    try:
        img_r = img.shape[0]

        img_c = img.shape[1]
    except Exception as e:
        raise Exception(
            f'\nInform a \033[31mNumpy\033[37m array\n\n{str(e)}\n')

    for c, n in zip(range(0, img_r + 1, img_r // rows), range(img_r // rows, img_r + 1, img_r // rows)):
        for i, f in zip(range(0, img_c + 1, img_c // cols), range(img_c // cols, img_c + 1, img_r // cols)):
            cache.append(img[c:n, i:f])

    return cache
...