2016-01-22 109 views
0

我有它们的图像的RGB值的字节的阵列。例如,数组的前三个字节将是左上像素的RGB值。即a[0]是R,a[1]是G并且a[2]是B.最快分割图像成瓦片的方法

该图像实际上是图像的网格,通常以2x2形式排列。这是一个例子。

Example

我目前使用PIL到图像分割成4个子图像

。这是我目前使用的代码。

def split_image_to_tiles(im, grid_width, grid_height): 
    #This treats the image `im` as a square grid of images. 
    w, h = im.size 

    w_step = w/grid_width 
    h_step = h/grid_height 

    tiles = [] 
    for y in xrange(0, grid_height): 
     for x in xrange(0, grid_width): 
      x1 = x * w_step 
      y1 = y * h_step 
      x2 = x1 + w_step 
      y2 = y1 + h_step 
      t = im.crop((x1, y1, x2, y2)) 
      tiles.append(t) 

    return tiles 

这是有效的,但它并不是特别快。有更好还是更快的方法?

+0

你为什么要拆分它们?将其他图像视为填充。 – onemasse

回答

0

事实上,在复杂性方面,你可以什么都不做,它会继续下去,为O(N)的复杂性,其中N是你想从图像获取的瓷砖数量。

对此,您应该运行探查器REALIZER在时间确实花费。正如你所猜测的那样,im.crop是大多数时候CPU卡住的方法。

这是一个典型的CPU绑定的问题,找出不尝试优化其所裁剪自我是使用尽可能多的进程你想获得尽可能多的瓷砖更好的近似的唯一途径。为什么要加工

在这种情况下,我们没有IO绑定的GIL问题,我们要确保每个Python解释器获取CPU没有问题。

然后,我recomendation是使用multiprocessing Python模块。