2012-02-07 56 views
0

的我需要一個式(邏輯)來劃分在「N」數量相等的部分的固定區域。例如,我有一張800 * 800的照片/圖像,所以現在我需要將它分成10個相同的部分以及切片部分的尺寸。你能幫我嗎?將畫面劃分成N個相等的部分

回答

2

既然你不指定,他們需要是正方形,或施加比「十個等份」以外的任何其他限制,你爲什麼不只是切片圖像分割成(對於示例)十倍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

首先,你應該找到了N的所有這樣的對k的,L中K * L = N。 K - 行數,l - 列數。
其次,你應該選擇這些對你想要的。
之後,你應該剪切圖像。

什麼步驟使得一個問題嗎?

如果你想要的,例如,最方形部分,檢查全1從開方(N)的一個開始下降。獲得你找到的第一個分隔線。因此,您可以合併步驟1和2.