Деление картинки на N равных частей - PullRequest
0 голосов
/ 07 февраля 2012

Мне нужна формула (логика), чтобы разделить фиксированную область на «N» количество равных частей. Например, у меня есть картинка / изображение 800 * 800, так что теперь мне нужно нарезать его на 10 равных частей и каков будет размер нарезанных частей. Вы можете помочь мне в этом?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Поскольку вы не указываете, что они должны быть квадратными, или налагаете какие-либо другие ограничения, кроме «десяти равных частей», почему бы вам просто не нарезать изображение на (для вашего примера) десяти изображений 80 * 800 ( или 800 * 80, если вы хотите нарезать в другом измерении)?

Это даст десять кусков одинакового размера, не беспокоясь о том, есть ли у вас оптимальные квадраты и так далее. Если вариант использования просто нарезать на равные части (например, изображение, идущее по проводам из сети, где десять небольших запросов могут казаться более отзывчивыми, чем один большой), это будет работать нормально.

Другими словами, что-то вроде:

def getSlice (sliceNumber, sliceCount, image):
    xpos   = 0
    xsize  = image.xsize

    ypos   =  sliceNumber      * image.ysize / sliceCount
    ypos2  = (sliceNumber + 1) * image.ysize / sliceCount

    if sliceNumber < sliceCount - 1:
        ysize = ypos2 - ypos1
    else:
        ysize = image.ysize - ypos1 - 1

    return image.subImage (xpos, ypos, xsize, ysize)

При вызове с пятью ломтиками вы получите:

+-------------------------------------------+
|           getSlice (0, 5, image)          |
+-------------------------------------------+
|           getSlice (1, 5, image)          |
+-------------------------------------------+
|           getSlice (2, 5, image)          |
+-------------------------------------------+
|           getSlice (3, 5, image)          |
+-------------------------------------------+
|           getSlice (4, 5, image)          |
+-------------------------------------------+

Вещи ypos/ypos2 и оператор if в конце предназначены для ситуаций, когда подразделения не могут давать идеально выровненные числа. Они должны гарантировать, что вы не будете дублировать или пропускать какие-либо строки на изображении.

0 голосов
/ 07 февраля 2012

Во-первых, вы должны найти для N все такие пары k, l, что k * l = N. K - количество строк, l - количество столбцов.
Во-вторых, вы должны выбрать из этих пар ту, которую хотите.
После этого вы должны вырезать изображение.

Какой шаг создает проблему?

Если вы хотите, например, максимально квадратные части, проверьте все l, начиная с sqrt (N) и уменьшая их на единицу. Получите первый делитель, который вы найдете. Таким образом, вы можете объединить шаги 1 и 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...