将图片分成N个相等的部分

时间:2012-02-07 08:04:56

标签: algorithm logic

我需要一个公式(逻辑)来划分'N'个相等部分的固定区域。例如,我的图片/图像为800 * 800,所以现在我需要将其切成10个相等的部分,切片部分的尺寸是多少。你可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

由于您没有指定它们需要是方形的,或者除了“十个相等的部分”之外还要施加任何其他限制,为什么不将图像切成(例如)10个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语句是为了满足分部可能无法提供完美对齐数字的情况。他们应该保证您不会复制或遗漏图像中的任何行。

答案 1 :(得分:0)

首先,你应该找到N所有这样的k对,即k * l = N. K - 行数,l - 列数。
其次,你应该选择你想要的那些对。
之后你应该剪切图像。

出现问题的步骤是什么?

如果你想要,例如,最方形的部分,检查从sqrt(N)开始的所有l。找到你找到的第一个分隔线。因此,您可以将步骤1和2结合起来。